home *** CD-ROM | disk | FTP | other *** search
/ ShareWare OnLine 2 / ShareWare OnLine Volume 2 (CMS Software)(1993).iso / prog / inter35b.zip / INTERRUP.G < prev    next >
Text File  |  1993-06-05  |  303KB  |  8,100 lines

  1. Interrupt List, part 7 of 9
  2. This compilation is Copyright (c) 1989,1990,1991,1992,1993 Ralf Brown
  3. --------F-2FC0-------------------------------
  4. INT 2F - MTEZ XpressFax Hardware TSR (CLASS2) - API
  5.     AH = C0h
  6.     AL = function code (01h to 15h)
  7. Return: ???
  8. SeeAlso: AX=C000h"MTEZ",AX=CB00h"MTEZ"
  9. --------N-2FC000-----------------------------
  10. INT 2F - Novell ODI Link Support Layer (LSL.COM) - INSTALLATION CHECK
  11.     AX = C000h
  12. Return: AL = FFh if installed
  13.         DX:BX -> FAR entry point (see below)
  14.         ES:SI -> signature string "LINKSUP$"
  15. Notes:    LSL.COM may use any multiplex number between C0h and FFh; it searches
  16.       for itself in that range, and installs using the first free multiplex
  17.       number in the range if not already loaded.
  18.     on return, ES = DX for LSL v1.10; LSL makes use of this in its search
  19.       for a previous installation
  20.  
  21. Call LSL entry point with:
  22.     BX = 0001h "Request MLID Registration"
  23.         ES:SI -> ???
  24.         ???
  25.         Return:    AX = completion code (see below)
  26.             DS:DI -> LSL information block
  27.     BX = 0002h get support entry points
  28.         ES:SI -> buffer for entry point record (see below)
  29.         Return: ES:SI buffer filled
  30.     BX = 0003h "Request MLID API entry point"
  31.         Return: ES:SI -> MLID API entry point
  32.                  (call with BX=function 00h-10h, not range-checked)
  33. Notes:    LSL v1.10 executes BX=0003h for all other values of BX
  34.     see "Novell LAN Driver Developer's Guide, Volume III" for details of
  35.       function 0001h
  36.  
  37. Values for completion code:
  38.  0000h    successful
  39.  8001h    out of resources
  40.  8002h    bad parameter
  41.  8003h    no more items
  42.  8004h    item not present
  43.  8005h    failed
  44.  8006h    receive overflow
  45.  8007h    canceled
  46.  8008h    bad command
  47.  8009h    duplicate entry
  48.  800Ah    no such handler
  49.  800Bh    no such driver
  50.  
  51. Format of entry point record:
  52. Offset    Size    Description
  53.  00h    DWORD    pointer to protocol support entry point in LSL (see below)
  54.  04h    DWORD    pointer to general support entry point in LSL (see below)
  55.  
  56. Call protocol support entry point with:
  57.     BX = function number
  58.         0000h ???
  59.         0001h ???
  60.         0002h ???
  61.         0003h "ScheduleAESEvent"
  62.         ES:SI -> AES ECB to be scheduled (see below for format)
  63.         Return: ES,SI preserved
  64.         0004h "CancelAESEvent"
  65.         ES:SI -> ECB to be cancelled (see below for format)
  66.         Return: ES,SI preserved
  67.         0005h "GetIntervalMarker"
  68.         Return: DX:AX = current interval marker in milliseconds
  69.             all other registers preserved
  70.         0006h "RegisterStack"
  71.         AX = logical board number
  72.         ES:SI -> bound stack info structure (see below)
  73.         Return: BX = assigned Stack ID if AX=0000h
  74.         0007h "DeRegisterStack"
  75.         AX = protocol stack's assigned Stack ID
  76.         0008h "RegisterDefaultStack"
  77.         AX = logical board number
  78.         ES:SI -> stack info structure (see below)
  79.         0009h "DeRegisterDefaultStack"
  80.         AX = logical board number
  81.         000Ah "RegisterPrescanStack"
  82.         AX = logical board number
  83.         ES:SI -> stack info structure (see below)
  84.         000Bh "DeRegisterPrescanStack"
  85.         AX = logical board number
  86.         000Ch "SendPacket"
  87.             ES:SI -> send ECB
  88.         Return: interrupts disabled
  89.         000Dh ???
  90.         000Eh ???
  91.         000Fh ???
  92.         0010h "GetStackIDFromName"
  93.         ES:SI -> counted NUL-terminated protocol name (max 15 chars)
  94.         Return: BX = Stack ID if AX=0000h
  95.         0011h "GetPIDFromStackIDBoard"
  96.         AX = Stack ID for protocol
  97.         CX = logical board number
  98.         ES:SI -> 6-byte buffer for protocol ID
  99.         0012h "GetMLIDControlEntry"
  100.         AX = logical board number
  101.         Return: ES:SI -> MLID control handler (see below) if AX=0000h
  102.         0013h "GetProtocolControlEntry"
  103.         AX = Stack ID or
  104.             FFFEh Prescan stack
  105.                 CX = logical board number
  106.             FFFFh default protocol
  107.                 CX = logical board number
  108.         Return: ES:SI -> protocol stack control entry point if AX=0000h
  109.                 (see below)
  110.         0014h "GetLSLStatistics"
  111.         Return: AX = 0000h (successful)
  112.             ZF set
  113.             ES:SI -> LSL statistics table (see below)
  114.         0015h "BindStack"
  115.         AX = protocol stack's assigned Stack ID
  116.         CX = logical board number
  117.         0016h "UnbindStack"
  118.             AX = protocol stack's assigned Stack ID
  119.         CX = logical board number
  120.         0017h "AddProtocolID"
  121.         AX = frame type ID code
  122.         ES:SI -> 6-byte protocol ID
  123.         CX:DI -> counted NUL-terminated short protocol name (max 15 ch)
  124.         0018h "RelinquishControl"
  125.         Return: after LSL performs any necessary background processing
  126.         0019h "GetLSLConfiguration"
  127.         Return: AX = 0000h (successful)
  128.             ZF set
  129.             ES:SI -> LSL configuration table (see below)
  130.         001Ah "GetTickMarker"
  131.         Return: AX = number of 55ms ticks since LSL loaded
  132.             BX destroyed
  133. Return: AX = completion code (see above)
  134.     ZF set if successful
  135.     SS:SP, DS, BP preserved; most other registers may be destroyed
  136.  
  137. Call general support entry point with:
  138.     BX = function number
  139.         0000h "Allocate Memory" (obsolete)
  140.          always returns AX=8008h (BAD_COMMAND)
  141.         0001h "Free Memory" (obsolete)
  142.          always returns AX=8008h (BAD_COMMAND)
  143.         0002h "Realloc Memory" (obsolete)
  144.          always returns AX=8008h (BAD_COMMAND)
  145.         0003h "Memory Statistics" (obsolete)
  146.          always returns AX=8008h (BAD_COMMAND)
  147.         0004h "Add Memory To Pool" (obsolete)
  148.          always returns AX=8008h (BAD_COMMAND)
  149.         0005h "AddGeneralService"
  150.         ES:SI -> General Service Control Block (see below)
  151.         0006h "RemoveGeneralService"
  152.         ES:SI -> General Service Control Block (see below)
  153.         0007h "GetNETcfgPath"
  154.             Return: AX = 0000h (successful)
  155.             DS:DX -> ASCIZ pathname for NET.CFG
  156.         0008h U ???     (in LSL 1.10)
  157.         Return: AX = 0000h
  158.             ES:SI -> ??? (a 22-byte data area)
  159.         000Ah "GetCriticalSectionStatus"
  160.             Return: BX = total outstanding calls to "StartCriticalSection"
  161.         000Bh "ServiceEvents"
  162.             interrupts disabled
  163.         Return: interrupts disabled
  164.         0010h "GetStackECB"
  165.             DS:DI -> Lookahead structure (see below)
  166.         interrupts disabled
  167.         Return: ES:SI -> ECB if successful (AX=0000h,ZF set)
  168.             interrupts disabled
  169.         8000h-FFFFh reserved for user general service providers
  170. Return: AX = completion code (see above)
  171.     ZF set if successful
  172.     SS:SP, DS, BP preserved
  173.  
  174. Call MLID control handler with:
  175.     AX = logical board number
  176.     BX = function number
  177.         0000h "GetMLIDConfiguration"
  178.         Return:    ES:SI -> MLID's configuration table if successful
  179.                 (see below for format)
  180.         0001h "GetMLIDStatistics"
  181.         Return:    ES:SI -> MLID's statistics table if successful
  182.                 (see below for format)
  183.         0002h "AddMulticastAddress"
  184.         ES:SI -> 6-byte multicast address to add
  185.         0003h "DeleteMulticastAddress"
  186.         ES:SI -> 6-byte multicast address to delete
  187.         0005h "MLIDShutdown"
  188.         CX = type
  189.             0000h permanent (also deregisters from LSL)
  190.             other temporary (shutdown hardware only)
  191.         0006h "MLIDReset" reinitialize board / restart from temp shutdown
  192.         0007h "Create Connection" (obsolete?)
  193.         ???
  194.         0008h "Delete Connection" (obsolete?)
  195.         ???
  196.         0009h "SetLookAheadSize"
  197.         CX = requested lookahead size (00h-80h)
  198.         0010h "PromiscuousChange"
  199.         CX = what to receive promiscuously
  200.             bit 0: MAC frames
  201.             bit 1: non-MAC frames
  202.         0011h "RegisterReceiveMonitor"
  203.             CX = subfunction
  204.             0000h disable receive monitoring
  205.             else  enable receive monitoring
  206.         ES:SI -> monitor receive routine
  207.         ES:DI -> monitor transmit routine
  208.         0012h "Driver Poll" (obsolete?)
  209.         ???
  210. Return: AX = completion code (see above)
  211.     ZF set if successful
  212. Note:    not all boards/MLIDs support function 0010h; see bit 13 in the MLID
  213.       mode flags field of the MLID's configuration table
  214.  
  215. Call protocol stack control entry point with:
  216.     BX = function number
  217.         0000h "GetProtocolStackConfiguration"
  218.         Return: ES:SI -> protocol stack's configuration table
  219.                 (see below)
  220.         0001h "GetProtocolStackStatistics"
  221.         Return: ES:SI -> protocol stack's statistics table (see below)
  222.         0002h "BindToMLID"
  223.         CX = board number to bind to
  224.         ES:SI -> implementation-dependant parameter string
  225.         0003h "UnBindFromMLID"
  226.         CX = board number from which protocol should unbind
  227.         ES:SI -> optional implementation-dependant parameter string
  228.         0004h "MLIDDeRegistered"
  229.         CX = board number that has de-registered from LSL
  230. Return: AX = status
  231.         0000h successful
  232.         else implementation-dependant error codes
  233.     ZF set if successful
  234.     SS:SP, DS, BP preserved
  235.  
  236. Format of AES ECB:
  237. Offset    Size    Description
  238.  00h    DWORD    "AESLink" pointer used by LSL for list management
  239.  04h    DWORD    number of milliseconds to wait
  240.  08h    DWORD    "AESStatus" (is set to 00000000h when AES ESR is invoked)
  241.  0Ch    DWORD    -> function to be invoked when time expires
  242.         ES:SI will point to this structure on entry,
  243.         DS, BP, and SS:SP must be preserved.
  244.  
  245. Format of LSL Configuration Table:
  246. Offset    Size    Description
  247.  00h    BYTE    major version of configuration table
  248.  01h    BYTE    minor version of configuration table (decimal, 0-99)
  249.  02h  8 BYTEs    reserved
  250.  0Ah    BYTE    LSL major version (decimal)
  251.  0Bh    BYTE    LSL minor version (decimal, 0-99)
  252. ---LSL 1.0x ---
  253.  0Ch 14 BYTEs    reserved
  254. ---LSL 1.10+ ---
  255.  0Ch    WORD    maximum number of boards which LSL can handle
  256.  0Eh    WORD    maximum number of protocol IDs which LSL can handle
  257.  10h 12 BYTES    reserved
  258.  
  259. Format of LSL Statistics Table:
  260. Offset    Size    Description
  261.  00h    BYTE    major version of statistics table format
  262.  01h    BYTE    minor version of statistics table format (decimal, 0-99)
  263.  02h    WORD    "GenericCounters" number of counters in static portion of 
  264.          table
  265.  04h    DWORD    "ValidCountersMask" bit mask indicating which generic
  266.         counters are actually used.  Bit 31 = TotalTxPackets, bit 30
  267.         is the next field, etc.
  268.  08h    DWORD    "TotalTxPackets" total SendPacket requests made
  269.  0Ch    DWORD    reserved
  270.  10h    DWORD    reserved
  271.  14h    DWORD    "AESEventsCount" number of completed AES events
  272.  18h    DWORD    "PostponedEvents" number of events postponed due to critical
  273.          sections inside the MLIDs
  274.  1Ch    DWORD    "CancelAESFailures" number of times CancelAESEvent failed
  275.  20h    DWORD    reserved
  276.  24h    DWORD    reserved
  277.  28h    DWORD    "TotalRxPackets" total number of GetStackECB requests
  278.  2ch    DWORD    "UnclaimedPackets" total number of packets not consumed by a
  279.         protocol stack
  280.  30h    WORD    "NumberCustom" number of custom variables that follow
  281.  32h  N DWORDs    custom counters
  282.       N DWORDs    -> CustomCounterStrN (one per custom counter)
  283.     var    length-prepended and NULL terminated string for Counter 0
  284.     ...
  285.     var    length-prepended and NULL terminated string for Counter N-1
  286.  
  287. Format of Protocol Stack Statistics Table:
  288. Offset    Size    Description
  289.  00h    BYTE    statistics table major version
  290.  01h    BYTE    statistics table minor version (decimal, 0-99)
  291.  02h    WORD    number of generic counters following
  292.  04h    DWORD    "ValidCountersMask" (bitmask, bit 31 is TotalTxPackets)
  293.  08h    DWORD    TotalTxPackets
  294.  0ch    DWORD    TotalRxPackets
  295.  10h    DWORD    IgnoredRxPackets
  296.  14h    WORD    number of custom counters
  297.  16h  N DWORDs    custom counters
  298.       N DWORDs    -> CustomCounterStrN (one per custom counter)
  299.           var    length-prepended and NULL terminated string for Counter 0
  300.     ...
  301.     var    length-prepended and NULL terminated string for Counter N-1
  302.  
  303. Format of Protocol Stack Configuration Table:
  304. Offset    Size    Description
  305.  00h    BYTE    configuration table major version
  306.  01h    BYTE    configuration table minor version (decimal, 0-99)
  307.  02h    DWORD    -> counted NUL-terminated long descriptive name for protocol
  308.  06h    DWORD    -> counted NUL-terminated short name for protocol (15 chars)
  309.  0Ah    BYTE    protocol stack major version
  310.  0Bh    BYTE    protocol stack minor version (decimal, 0-99)
  311.  0Ch 16 BYTEs    reserved for future use
  312.  
  313. Format of MLID Configuration Table:
  314. Offset    Size    Description
  315.  00h 26 BYTEs    signature 'HardwareDriverMLID         ' (8 spaces on end)
  316.  1ah    BYTE    configuration table major version
  317.  1bh    BYTE    configuration table minor version (decimal, 0-99)
  318.  1ch  6 BYTEs    node address 
  319.  22h    WORD    MLID mode flags (see below)
  320.  24h    WORD    board number
  321.  26h    WORD    board instance (if more than one of same board installed)
  322.  28h    WORD    maximum packet size
  323.  2Ah    WORD    BestDataSize
  324.  2Ch    WORD    WorstDataSize
  325.  2Eh    DWORD    -> counted NUL-terminated long name for NIC
  326.  32h    DWORD    -> counted NUL-terminated short name for NIC (8 chars max)
  327.  36h    DWORD    -> counted NUL-terminated Frame and Media type 
  328.  3Ah    WORD    reserved (0000h)
  329.  3Ch    WORD    frame type ID
  330.  3Eh    WORD    TransportTime (milliseconds)
  331.  40h    DWORD    -> SourceRouteHandler for TokenRing. (Used by ROUTE.COM)
  332.  44h    WORD    lookahead size
  333.  46h    WORD    line speed (Mbps if high bit clear, else Kbps)
  334.  48h    WORD    QueueDepth
  335.  4Ch  6 BYTEs    reserved (0)
  336.  54h    BYTE    driver major version
  337.  55h    BYTE    driver minor version (decimal, 0-99)
  338.  56h    WORD    flags
  339.         bits 10-9: specialized multicast support
  340.             00 = Group addressing is default for medium
  341.             01 = Invalid
  342.             10 = Filter group address in MLID.
  343.             11 = Adapter filters group address.
  344.         bit 2: supports Micro Channel cards
  345.         bit 1: supports ISA cards
  346.         bit 0: supports EISA cards
  347.  58h    WORD    send retries
  348.  5Ah    DWORD    ConfigTableLink
  349.  5Eh    WORD    MLID sharing flags (see below)
  350.  60h    WORD    slot number
  351.  62h    WORD    I/O address 1
  352.  64h    WORD    I/O range 1
  353.  66h    WORD    I/O address 2
  354.  68h    WORD    I/O range 2
  355.  6Ah    DWORD    memory address 1
  356.  6Eh    WORD    memory size 1
  357.  70h    DWORD    memory address 2
  358.  74h    WORD    memory size 2
  359.  76h    BYTE    interrupt line 1
  360.  77h    BYTE    interrupt line 2
  361.  78h    BYTE    DMA line 1
  362.  79h    BYTE    DMA line 2
  363.  
  364. Bitfields for MLID mode flags:
  365.  bit 15    MLID supports Octet Bit Reversal
  366.  bit 14    node address is non-canonical
  367.  bit 13    promiscuous mode is supported
  368.  bit 12-8 reserved
  369.  bit 7    LDataSize field in LookAhead structure supported
  370.  bit 6    raw send supported
  371.  bit 5    MLID needs to be polled by LSL
  372.  bit 4    reserved (0)
  373.  bit 3    multicasting is supported
  374.  bit 2    not currently used by DOS ODI, set to 0.
  375.  bit 1    network card uses DMA.
  376.  bit 0    RealDriverBit, always set to 1.
  377.  
  378. Bitfields for MLID sharing flags:
  379.  bit 8    NIC can share DMA2
  380.  bit 7    NIC can share DMA1
  381.  bit 6    NIC can share IRQ2
  382.  bit 5    NIC can share IRQ1
  383.  bit 4    NIC can share Memory2
  384.  bit 3    NIC can share Memory1
  385.  bit 2    NIC can share IO2
  386.  bit 1    NIC can share IO1
  387.  bit 0    MLID is currently shut down
  388.  
  389. Format of MLID Statistics Table:
  390. Offset    Size    Description
  391.  00h    BYTE    driver statistics table major version
  392.  01h    BYTE    driver statistics table minor version (decimal, 0-99)
  393.  02h    WORD    number of generic counters (typically 13)
  394.  04h    DWORD    "ValidCountersMask" (bit mask, bit 31 is TotalTxCount)
  395.  08h    DWORD    TotalTxCount
  396.  0Ch    DWORD    TotalRxCount
  397.  10h    DWORD    NoECBAvailableCount
  398.  14h    DWORD    TxTooBigCount
  399.  18h    DWORD    TxTooSmallCount
  400.  1ch    DWORD    RxOverflowCount
  401.  20h    DWORD    RxTooBigCount
  402.  24h    DWORD    RxTooSmallCount
  403.  28h    DWORD    TxMiscCount
  404.  2ch    DWORD    RxMiscCount
  405.  30h    DWORD    TxRetryCount
  406.  34h    DWORD    RxChecksumErrorCount
  407.  38h    DWORD    RxMismatchCount
  408.  3Ch    WORD    number of custom counters
  409.  3Eh  N DWORDs    custom counters
  410.       N DWORDs    -> CustomCounterStrN (one per custom counter)
  411.     var    length-prepended and NULL terminated string for Counter 0
  412.     ...
  413.     var    length-prepended and NULL terminated string for Counter N-1
  414.  
  415. Format of bound stack info structure:
  416. Offset    Size    Description
  417.  00h    DWORD    -> protocol stack's short name (counted, NUL-terminated)
  418.  04h    DWORD    -> receive handler
  419.  08h    DWORD    -> control handler
  420.  
  421. Format of stack info structure:
  422. Offset    Size    Description
  423.  00h    DWORD    -> receive handler
  424.  04h    DWORD    -> control handler
  425.  
  426. Format of General Service Control Block:
  427. Offset    Size    Description
  428.  00h    DWORD    -> next GSCB (maintained internally by LSL)
  429.  04h    DWORD    -> entry point for general service handler
  430.  08h    WORD    command code for this general service (8000h-FFFFh)
  431. Note:    the control block must not be altered or deallocated until the general
  432.       service is removed
  433.  
  434. Format of Lookahead structure:
  435. Offset    Size    Description
  436.  00h    DWORD    -> Media header
  437.  04h    DWORD    -> lookahead buffer
  438.  08h    WORD    length of lookahead buffer
  439.  0Ah  6 BYTEs    protocol ID
  440.  10h    WORD    logical board number
  441.  12h    WORD    lookahead size
  442. --------f-2FC000-----------------------------
  443. INT 2F - FN32 32 character filename utilities - INSTALLATION CHECK
  444.     AX = C000h
  445. Return: AL = FFh if installed
  446.        ES:DI -> signature string "FN32 32CHAR TSR"
  447. Program: FN32 is a TSR which supports 32 character filenames under PC/MS-DOS
  448. Note:    the TSR intercepts INT 21 calls and performs filename substitution by
  449.       managing dictionary files in each directory which contains long
  450.       filenames
  451. --------M-2FC000-----------------------------
  452. INT 2F - QMR - INSTALLATION CHECK
  453.     AX = C000h
  454. Return: AL = FFh if installed
  455.         ES:DI -> signature string "QMR1!"
  456. Program: QMR (Cove Software, Quick Mouse Reset) monitors the mouse
  457.       service interrupt (int 33h) and substitutes a fast software
  458.       reset (mouse fn 21h) for the slow hardware reset (mouse fn 0).
  459. Note:    QMR may use any multiplex number between C0h and FFh; it searches
  460.      for itself in that range, and installs using the first free multiplex
  461.      number in the range if not already loaded.
  462. SeeAlso: AX=C001h"QMR",AX=C002h"QMR",AX=C003h"QMR"
  463. --------V-2FC000-----------------------------
  464. INT 2F - VGAsave v1.93 - INSTALLATION CHECK
  465.     AX = C000h
  466. Return: AL = FFh if installed
  467.         BX = segment of resident code
  468. Program: VGAsave is a freeware VGA-specific, mouse-aware screenblanker by Bill
  469.       Javurek
  470. Note:    VGAsave may use any AH value from C0h through FFh; the transient
  471.       portion of VGAsave compares the first 38 bytes of the resident code
  472.       (addressed through BX) against its own copy of the resident code to
  473.       complete the installation check
  474. Index:    screen saver
  475. --------F-2FC000BX444B-----------------------
  476. INT 2F - MTEZ XpressFax Hardware TSR (CLASS2) - INSTALLATION CHECK
  477.     AX = C000h
  478.     BX = 444Bh
  479.     CX = 4A4Eh
  480. Return: AL = status
  481.         00h not installed, OK to install
  482.         FFh installed
  483.         BX = 646Bh
  484.         CX = 6A6Eh
  485. Note:    this TSR will use any free multiplex number from C0h to FFh
  486. SeeAlso: AH=C0h"MTEZ"
  487. --------V-2FC000-----------------------------
  488. INT 2F - AD-DOS - INSTALLATION CHECK
  489.     AX = C000h
  490. Return: AL = FFh if installed
  491.         BX = 4144h ('AD')
  492.         CX = 2D44h ('-D')
  493.         DX = 4F53h ('OS')
  494. Program: AD-DOS is the DOS version of the After Dark screen blanker for
  495.       MS Windows
  496. Note:    AH=C0h is the default multiplex number; if this is already in use,
  497.       After Dark will try successive values up to AH=FFh
  498. SeeAlso: AX=C001h,AX=C003h,AX=C005h,AX=C007h,AX=C009h,AX=C020h
  499. Index:    screen saver
  500. --------M-2FC001-----------------------------
  501. INT 2F - QMR - REQUEST HARDWARE RESET
  502.     AX = C001h
  503. Return: ES = QMR code segment
  504.     AL destroyed
  505. Desc:    this function is used to force a full mouse reset when QMR is installed
  506. SeeAlso: AX=C000h"QMR",AX=C002h"QMR"
  507. --------V-2FC001ES0000-----------------------
  508. INT 2F - AD-DOS - GET RESIDENT CODE SEGMENT
  509.     AX = C001h
  510.     ES = 0000h
  511. Return: AL = 00h if successful
  512.         ES = AD-DOS TSR Code Segment
  513. SeeAlso: AX=C000h"AD-DOS"
  514. --------V-2FC002-----------------------------
  515. INT 2F - AD-DOS - CHECK FOR NEW INPUT
  516.     AX = C002h
  517. Return: AL = 00h if succesful
  518.         BX = status
  519.         0000h no input since last check
  520.         0001h new input available
  521. Note:    this call also resets the new-input flag
  522. SeeAlso: AX=C000h"AD-DOS",AX=C004h
  523. --------M-2FC002-----------------------------
  524. INT 2F - QMR - DISABLE QMR
  525.     AX = C002h
  526. Return: ES = QMR code segment
  527.     AL destroyed
  528. Desc:    this call temporarily disables QMR
  529. SeeAlso: AX=C000h"QMR",AX=C003h"QMR"
  530. --------V-2FC003-----------------------------
  531. INT 2F - AD-DOS - SET MINUTES TO WAIT
  532.     AX = C003h
  533.     BX = minutes to wait before blanking screen
  534. Return: AL = 00h if successful
  535. Program: AD-DOS is the DOS version of the After Dark screen blanker for
  536.       MS Windows
  537. Notes:    AH=C0h is the default multiplex number; if this is already in use,
  538.       After Dark will try successive values up to AH=FFh
  539.     this call also resets the delay timer
  540. SeeAlso: AX=C000h"AD-DOS",AX=C004h
  541. --------M-2FC003-----------------------------
  542. INT 2F - QMR - ENABLE QMR
  543.     AX = C003h
  544. Return: ES = QMR code segment
  545.     AL destroyed
  546. Desc:    this call enables QMR after it has been disabled
  547. SeeAlso: AX=C000h"QMR",AX=C002h"QMR"
  548. --------V-2FC004-----------------------------
  549. INT 2F - AD-DOS - GET MINUTES TO WAIT
  550.     AX = C004h
  551. Return: AL = 00h if succesful
  552.         BX = minutes to wait before blanking screen
  553. SeeAlso: AX=C000h"AD-DOS",AX=C003h
  554. --------V-2FC005-----------------------------
  555. INT 2F - AD-DOS - SET BLANKER STATUS
  556.     AX = C005h
  557.     BX = new state (0000h inactive, 0001h active) (default 0001h)
  558. Return: AL = 00h if successful
  559. SeeAlso: AX=C006h
  560. --------V-2FC006-----------------------------
  561. INT 2F - AD-DOS - GET BLANKER STATUS
  562.     AX = C006h
  563. Return: AL = 00h if successful
  564.         BX = current state of screen blanker (0000h inactive, 0001h active)
  565. Program: AD-DOS is the DOS version of the After Dark screen blanker for
  566.       MS Windows
  567. Note:    AH=C0h is the default multiplex number; if this is already in use,
  568.       After Dark will try successive values up to AH=FFh
  569. SeeAlso: AX=C000h"AD-DOS",AX=C005h
  570. --------V-2FC007-----------------------------
  571. INT 2F - AD-DOS - SET HOT KEY
  572.     AX = C007h
  573.     BX = hot key
  574.     CL = hot key shift status
  575. Return: AL = 00h if successful
  576. SeeAlso: AX=C008h
  577. --------V-2FC008-----------------------------
  578. INT 2F - AD-DOS - GET CURRENT HOT KEY
  579.     AX = C008h
  580. Return: AX = status
  581.         0000h successful
  582.         BX = Hot Key
  583.         CL = Hot Key Shift Status
  584.         0008h otherwise
  585. SeeAlso: AX=C000h"AD-DOS",AX=C007h
  586. --------V-2FC009-----------------------------
  587. INT 2F - AD-DOS - UNBLANK MONITOR
  588.     AX = C009h
  589. Return: AL = 00h if successful
  590. Program: AD-DOS is the DOS version of the After Dark screen blanker for
  591.       MS Windows
  592. Notes:    AH=C0h is the default multiplex number; if this is already in use,
  593.       After Dark will try successive values up to AH=FFh
  594.     this function works by simulating keyboard activity
  595. --------V-2FC00A-----------------------------
  596. INT 2F - AD-DOS - ???
  597.     AX = C00Ah
  598. Return: AX = status
  599.         0000h successful
  600.         BH = ??
  601.         BL = ??
  602.         000Ah failed
  603. --------V-2FC00B-----------------------------
  604. INT 2F - AD-DOS - ???
  605.     AX = C00Bh
  606. Return: AX = status 
  607.         0000h successful
  608.         000Bh failed
  609. --------V-2FC00C-----------------------------
  610. INT 2F - AD-DOS - SET ??? INTERNAL FLAG TO 01h
  611.     AX = C00Ch
  612. Return: AX = status
  613.         0000h successful
  614.         000Ch failed
  615. Program: AD-DOS is the DOS version of the After Dark screen blanker for
  616.       MS Windows
  617. Note:    AH=C0h is the default multiplex number; if this is already in use,
  618.       After Dark will try successive values up to AH=FFh
  619. --------V-2FC00E-----------------------------
  620. INT 2F - AD-DOS - SET PASSWORD STATUS
  621.     AX = C00Eh
  622.     BX = new state (0000h disabled, 0001h enabled)
  623. Return: ???
  624. SeeAlso: AX=C000h"AD-DOS",AX=C00Fh
  625. --------V-2FC00F-----------------------------
  626. INT 2F - AD-DOS - GET PASSWORD STATUS
  627.     AX = C00Fh
  628. Return: BX = current state (0000h disabled, 0001h enabled)
  629. SeeAlso: AX=C00Eh
  630. --------V-2FC020-----------------------------
  631. INT 2F - AD-DOS - GET AND RESET VxD API STATUS
  632.     AX = C020h
  633. Return: AL = 00h if successful
  634.         BX = VxD API Status
  635.         0000h no error
  636.         0001h error
  637.         0100h neither Windows 3.X enhanced mode nor
  638.             Windows/386 2.x is running
  639.         0200h VM API entry point not found (VxD not installed)
  640. Notes:    AH=C0h is the default multiplex number; if this is already in use,
  641.       After Dark will try successive values up to AH=FFh
  642.     this call resets the VxD API Status to zero
  643. SeeAlso: AX=1602h,AX=1607h
  644. --------V-2FC050-----------------------------
  645. INT 2F U - Explosiv 2.00 - INSTALLATION CHECK
  646.     AX = C050h
  647. Return: AL = 51h if installed
  648. Program: Explosiv is a shareware animated screen blanker for DOS and Windows 3
  649.       by Reidar Gresseth and Chris Hook
  650. Note:    AH=C0h is the default multiplex number, but may be reconfigured to
  651.       any value from C0h to C9h
  652. SeeAlso: AX=C052h
  653. --------V-2FC052-----------------------------
  654. INT 2F U - Explosiv 2.00 - UNINSTALL
  655.     AX = C052h
  656.     DX:BX = address to return to on successful uninstall
  657. Return: at specified address if successful
  658.     AL = 53h on error
  659. Note:    specified return address must have the segment of the caller's PSP
  660. SeeAlso: AX=C050h
  661. --------V-2FC054-----------------------------
  662. INT 2F U - Explosiv 2.00 - GET ???
  663.     AX = C054h
  664. Return: AL = ???
  665. Note:    returns value set by AX=C057h
  666. SeeAlso: AX=C057h
  667. --------V-2FC055-----------------------------
  668. INT 2F U - Explosiv 2.00 - SET BLANKING INTERVAL
  669.     AX = C055h
  670.     BX = new interval in clock ticks
  671. --------V-2FC056-----------------------------
  672. INT 2F U - Explosiv 2.00 - SET ???
  673.     AX = C056h
  674.     BL = ???
  675. --------V-2FC057-----------------------------
  676. INT 2F U - Explosiv 2.00 - SET ???
  677.     AX = C057h
  678.     BL = ???
  679. SeeAlso: AX=C054h
  680. --------V-2FC058-----------------------------
  681. INT 2F U - Explosiv 2.00 - SET ???
  682.     AX = C058h
  683.     BL = ???
  684. --------V-2FC059-----------------------------
  685. INT 2F U - Explosiv 2.00 - CLEAR ???
  686.     AX = C059h
  687. Note:    clears flag set by AX=C05Ah
  688. SeeAlso: AX=C05Ah
  689. --------V-2FC05A-----------------------------
  690. INT 2F U - Explosiv 2.00 - SET ???
  691.     AX = C05Ah
  692.     BL = ???
  693. Note:    sets flag cleared by AX=C059h then stores BL
  694. SeeAlso: AX=C059h,AX=C05Bh
  695. --------V-2FC05B-----------------------------
  696. INT 2F U - Explosiv 2.00 - SET ???
  697.     AX = C05Bh
  698.     BL = ???
  699. SeeAlso: AX=C05Ah,AX=C05Ch
  700. --------V-2FC05C-----------------------------
  701. INT 2F U - Explosiv 2.00 - SET ???
  702.     AX = C05Ch
  703.     BL = ???
  704. SeeAlso: AX=C05Bh
  705. --------v-2FC900BP0000-----------------------
  706. INT 2F U - ThunderByte??? - INSTALLATION CHECK
  707.     AX = C900h
  708.     BP = 0000h
  709. Return: AL = FFh if installed
  710.         BP >= 0014h
  711. Note:    called by TBSCANX
  712. SeeAlso: AX=C987h,AX=CA00h
  713. --------v-2FC987-----------------------------
  714. INT 2F U - ThunderByte??? - DISINFECT FILE???
  715.     AX = C987h
  716.     BX:DX -> filename
  717.     BX:CX -> virus name
  718. Return: AX = status
  719.         0000h successful???
  720. Note:    called by TBSCANX
  721. SeeAlso: AX=CA00h
  722. ----------2FC9FF-----------------------------
  723. INT 2F C - StackMan - INSTALLATION BROADCAST
  724.     AX = C9FFh
  725.     BL = BCD version number
  726.     CX = number of stacks
  727.     DX = stack size in bytes
  728. Program: StackMan is a freeware stack manager by Franz Veldman of ESaSS B.V.
  729.       which functions as a replacement for the DOS STACK= command as well
  730.       as permitting multiple TSRs to share a pool of stack space
  731. Notes:    called by StackMan when it goes resident to inform interested TSRs that
  732.       its API is available
  733.     the installation check consists of testing for the string "STACKXXX" at
  734.       offset 0Ah from the INT B4 handler
  735. SeeAlso: INT B4"StackMan",INT B5"StackMan"
  736. Index:    installation check;STACKMAN|broadcasts;STACKMAN installation
  737. --------v-2FCA00BX5442-----------------------
  738. INT 2F - TBSCANX - INSTALLATION CHECK
  739.     AX = CA00h
  740.     BX = 5442h ('TB')
  741. Return:    AL = 00h not installed
  742.        = FFh installed
  743.         BX = 7462h ('tb') if BX was 5442h on entry
  744. Program: TBSCANX is a resident virus scanning module by Frans Veldman.
  745. Note:    programs may perform virus checks on themselves, other program files,
  746.       or their data files by invoking the TBSCANX API.
  747. SeeAlso: AX=4653h,AX=C900h
  748. --------v-2FCA01-----------------------------
  749. INT 2F - TBSCANX - GET STATUS
  750.     AX = CA01h
  751. Return: AH = BCD version number (v2.2+)
  752.        = CAh for versions before 2.2
  753.     AL = state (00h = disabled, 01h = enabled)
  754.     CX = number of signatures which will be searched
  755. ---v2.0---
  756.     BX = EMS handle, 0000h if not using EMS
  757. ---v2.3+---
  758.     BX = segment of swap area, 0000h if not swapped
  759.     DX = EMS or XMS handle (XMS handle if BX=0000h), FFFFh if not using EMS
  760. SeeAlso: AX=CA02h
  761. --------v-2FCA02-----------------------------
  762. INT 2F - TBSCANX - SET STATE
  763.     AX = CA02h
  764.     BL = new state (00h = disabled, 01h = enabled)
  765. SeeAlso: AX=CA01h
  766. --------v-2FCA03-----------------------------
  767. INT 2F - TBSCANX - SCAN BUFFER
  768.     AX = CA03h
  769.     CX = size of buffer
  770.     DS:DX -> buffer containing data to scan
  771. Return: CF clear if no virus signatures found
  772.         BX,ES destroyed
  773.     CF set if signature found
  774.         ES:BX -> ASCIZ virus name (v2.3+)
  775.         DS:DX -> ASCIZ virus name (v2.0)
  776.     AX,CX,DX destroyed (v2.3+)
  777.     all other registers except CS:IP and SS:SP destroyed (v2.0)
  778. SeeAlso: AX=CA04h
  779. --------v-2FCA04-----------------------------
  780. INT 2F - TBSCANX - SCAN FILE
  781.     AX = CA04h
  782.     DS:DX -> filename
  783. Return: CF clear if no virus signatures found
  784.         BX,ES destroyed
  785.     CF set if signature found
  786.         ES:BX -> ASCIZ virus name
  787.     AX,CX,DX destroyed
  788. Note:    this function requires at least 4K free memory
  789. SeeAlso: AX=CA03h
  790. --------U-2FCAFEBX0000-----------------------
  791. INT 2F U - THELP v3.0 - INSTALLATION CHECK
  792.     AX = CAFEh
  793.     BX = 0000h
  794. Return: BX = segment of resident code if installed
  795.        = 0000h if not installed
  796. SeeAlso: AX=5453h
  797. --------F-2FCB00-----------------------------
  798. INT 2F - Communicating Applications Specification - INSTALLATION CHECK
  799.     AX = CB00h
  800. Return: AL = status
  801.         00h not installed, OK to install
  802.         01h not installed, not OK to install
  803.         FFh installed
  804. Note:    AH = CBh is the default identifier, but may be reconfigured
  805. SeeAlso: AH=2Ah,AX=8000h"FaxBIOS",AX=CB0Eh,AX=CBDCh
  806. --------F-2FCB00BX4D53-----------------------
  807. INT 2F - MTEZ XpressFax CASMGR - INSTALLATION CHECK
  808.     AX = CB00h
  809.     BX = 4D53h
  810.     CX = 4949h
  811. Return: AL = status
  812.         00h not installed, OK to install
  813.         01h not installed, not OK to install
  814.         FFh installed
  815.         BX = 6D73h
  816.         CX = 6969h
  817. Note:    this function is equivalent to the standard CASMGR installation check,
  818.       but uses the additional magic values to identify which CAS is
  819.       installed
  820. SeeAlso: AH=2Ah,AX=8000h"FaxBIOS",AX=C000h"MTEZ",AX=CB0Eh,AX=CB16h
  821. --------F-2FCB01-----------------------------
  822. INT 2F - Communicating Applications Specification - SUBMIT A TASK
  823.     AX = CB01h
  824.     DS:DX -> ASCIZ name of task control file
  825. Return: AX >= 0: event handle
  826.        < 0: error code
  827. Note:    files needed for an event must be kept until task is complete or error
  828. SeeAlso: AX=CB0Bh,AX=CB15h
  829.  
  830. Error codes (AH = class, AL = subcode, value passed back is 2's complement):
  831.   Class 00h    --- FAX warnings
  832.     Subcode 00h    no error
  833.         02h    bad scanline count
  834.         03h    page sent with errors, could not retransmit
  835.         04h    received data lost
  836.         05h    invalid or missing logo file
  837.         06h    filename does not match nonstandard format (NSF) header
  838.         07h    file size does not match NSF header
  839.   Class 01h    --- DOS warnings (data was sent)
  840.     Subcode 01h    invalid function
  841.         05h    access denied
  842.         06h    invalid handle
  843.         others    see INT 21/AH=59h
  844.   Class 02h    --- fatal errors (data not sent)
  845.     Subcode    00h    multiplex handler failed
  846.         01h    unknown command
  847.         02h    bad event handle
  848.         03h    FIND NEXT attempted before FIND FIRST
  849.         04h    no more events
  850.         07h    invalid queue type
  851.         08h    bad control file
  852.         09h    communication board busy
  853.         0Ah    invalid command parameter
  854.         0Bh    can't uninstall resident code
  855.         0Ch    file exists
  856.         80h    unknown task type
  857.         81h    bad phone number
  858.         82h    bad .PCX file header
  859.         83h    unexpected EOF
  860.         84h    unexpected disconnect
  861.         85h    too many dialing retries
  862.         86h    no file specified for send
  863.         87h    communication board timeout
  864.         88h    received too many pages (>1023) of data
  865.         89h    manual connect initiated too long ago
  866.         8Ah    hardware command set error
  867.         8Bh    bad NonStandard Format (NSF) header file
  868.   Class 03h    --- fatal DOS errors
  869.     Subcode 02h    file not found
  870.         03h    path not found
  871.         others    see INT 21/AH=59h
  872.   Class 04h    --- FAX errors
  873.     Subcode 01h    remote unit not Group 3 compatible
  874.         02h    remote unit did not send capabilities
  875.         03h    other FAX machine incompatible
  876.         04h    other FAX incapable of file transfers
  877.         05h    exceeded retrain or FAX resend limit
  878.         06h    line noise or failure to agree on bit rate
  879.         07h    remote disconnected after receiving data
  880.         08h    no response from remote after sending data
  881.         09h    remote's capabilities incompatible
  882.         0Ah    no dial tone (v1.2+)
  883.         0Bh    invalid response from remote unit after sending data
  884.         0Dh    phone line dead or remote unit disconnected
  885.         0Eh    timeout while waiting for secondary dial tone (v1.2+)
  886.         11h    invalid command from remote after receiving data
  887.         15h    tried to receive from incompatible hardware
  888.         5Ch    received data overflowed input buffer
  889.         5Dh    remote unexpectedly stopped sending data
  890.         5Eh    other FAX machine jammed (no data sent)
  891.         5Fh    remote took too long to send fax scan line
  892.         63h    can't get through to remote unit
  893.         64h    user canceled event
  894.   Class 05h    --- application-specific (v1.2+)
  895.   ---Intel FAXPOP.EXE
  896.     Subcode 00h    tried to send while in graphics mode
  897.         01h    insufficient disk space
  898.         02h    internal buffer overflow
  899.   Class 06h    --- CAS implementation-specific (v1.2+)
  900. --------F-2FCB02-----------------------------
  901. INT 2F - Communicating Applications Specification - ABORT CURRENT EVENT
  902.     AX = CB02h
  903. Return: AX >= 0: event handle of aborted event
  904.        < 0: error code (see AX=CB01h)
  905. Note:    termination could take up to 30 seconds
  906. SeeAlso: AX=CB08h,AX=CB10h
  907. --------F-2FCB05-----------------------------
  908. INT 2F - Communicating Applications Specification - FIND FIRST QUEUE ENTRY
  909.     AX = CB05h
  910.     CX = status of events to find
  911.         0000h successful completion
  912.         0001h waiting to be processed
  913.         0002h number has been dialed
  914.         0003h connection established, sending
  915.         0004h connection established, receiving
  916.         0005h event aborted
  917.         FFFFh find any event, regardless of status
  918.         other negative values, match error code
  919.     DH = direction
  920.         00h chronological order, earliest to latest
  921.         01h reverse chronological order, latest to earliest
  922.     DL = queue to search
  923.         00h task queue
  924.         01h receive queue
  925.         02h log queue
  926. Return: AX = 0000h successful
  927.         BX = event handle for found event
  928.        < 0       error code (see AX=CB01h)
  929. SeeAlso: AX=CB06h,AX=CB07h
  930. --------F-2FCB06-----------------------------
  931. INT 2F - Communicating Applications Specification - FIND NEXT QUEUE ENTRY
  932.     AX = CB06h
  933.     DL = queue to search
  934.         00h task queue
  935.         01h receive queue
  936.         02h log queue
  937. Return: AX = 0000h successful
  938.         BX = event handle for found event
  939.        < 0       error code (see AX=CB01h)
  940. Note:    direction of search is same as preceding FIND FIRST call
  941. SeeAlso: AX=CB05h
  942. --------F-2FCB07-----------------------------
  943. INT 2F - Communicating Applications Specification - OPEN FILE
  944.     AX = CB07h
  945.     BX = event handle from find (AL=05h,06h) or submit task (AL=01h)
  946.     CX = receive file number (ignored for task queue and log queue)
  947.         0000h  open receive control file
  948.         N       open Nth received data file
  949.     DL = queue
  950.         00h task queue
  951.         01h receive queue control file or received file, as given by CX
  952.         02h log queue
  953.         03h group file in task queue (v1.2+)
  954.         04h group file in log queue (v1.2+)
  955. Return: AX = 0000h successful
  956.         BX = DOS file handle for requested file
  957.        < 0       error code (see AX=CB01h)
  958. Note:    the returned file handle has been opened in read-only mode and should
  959.       be closed with INT 21/AH=3Eh after use
  960. SeeAlso: AX=CB01h,AX=CB05h,AX=CB14h
  961. --------F-2FCB08-----------------------------
  962. INT 2F - Communicating Applications Specification - DELETE FILE
  963.     AX = CB08h
  964.     BX = event handle
  965.     CX = receive file number
  966.         0000h delete ALL received files and receive control file
  967.         N      delete Nth received file
  968.     DL = queue
  969.         00h delete control file in task queue and corresponding group file
  970.         if it exists
  971.         01h delete file in receive queue, as given by CX
  972.         02h delete control file in log queue (individual deletions not
  973.         recommended, to maintain integrity of log) and corresponding
  974.         group file if it exists
  975. Return: AX = 0000h successful
  976.        < 0       error code (see AX=CB01h)\
  977. SeeAlso: AX=CB02h,AX=CB09h
  978. --------F-2FCB09-----------------------------
  979. INT 2F - Communicating Applications Specification - DELETE ALL FILES IN Q
  980.     AX = CB09h
  981.     DL = queue
  982.         00h delete all control files in task queue, including all group
  983.         files
  984.         01h delete all files in receive queue
  985.         02h delete all control files in log queue, including all group
  986.         files
  987. Return: AX = 0000h successful
  988.        < 0       error code (see AX=CB01h)
  989. SeeAlso: AX=CB08h
  990. --------F-2FCB0A-----------------------------
  991. INT 2F - Communicating Applications Specification - GET EVENT DATE
  992.     AX = CB0Ah
  993.     BX = event handle
  994.     DL = queue
  995.         00h task queue
  996.         01h receive queue
  997.         02h log queue
  998. Return: AX = 0000h successful
  999.         CX = year
  1000.         DH = month
  1001.         DL = day
  1002.        < 0       error code (see AX=CB01h)
  1003. SeeAlso: AX=CB0Bh,AX=CB0Ch
  1004. --------F-2FCB0B-----------------------------
  1005. INT 2F - Communicating Applications Specification - SET TASK DATE
  1006.     AX = CB0Bh
  1007.     BX = event handle (task event only)
  1008.     CX = year
  1009.     DH = month
  1010.     DL = day
  1011. Return: AX = 0000h successful
  1012.        < 0       error code (see AX=CB01h)
  1013. Note:    setting a task's date and time to before the current date and time
  1014.       causes it to execute immediately
  1015. SeeAlso: AX=CB01h,AX=CB0Ah,AX=CB0Dh
  1016. --------F-2FCB0C-----------------------------
  1017. INT 2F - Communicating Applications Specification - GET EVENT TIME
  1018.     AX = CB0Ch
  1019.     BX = event handle
  1020.     DL = queue
  1021.         00h task queue
  1022.         01h receive queue
  1023.         02h log queue
  1024. Return: AX = 0000h successful
  1025.         CH = hour
  1026.         CL = minute
  1027.         DH = second
  1028.         DL = 00h
  1029.        < 0       error code (see AX=CB01h)
  1030. SeeAlso: AX=CB0Ah,AX=CB0Dh
  1031. --------F-2FCB0D-----------------------------
  1032. INT 2F - Communicating Applications Specification - SET TASK TIME
  1033.     AX = CB0Dh
  1034.     BX = event handle (task events only)
  1035.     CH = hour
  1036.     CL = minute
  1037.     DH = second
  1038.     DL unused
  1039. Return: AX = 0000h successful
  1040.        < 0       error code (see AX=CB01h)
  1041. Note:    setting a task's date and time to before the current date and time
  1042.       causes it to execute immediately
  1043. SeeAlso: AX=CB0Bh,AX=CB0Ch,AX=CB10h
  1044. --------F-2FCB0E-----------------------------
  1045. INT 2F - Communicating Applications Specification - GET EXTERNAL DATA BLOCK
  1046.     AX = CB0Eh
  1047.     DS:DX -> 256-byte buffer
  1048. Return: AX = 0000h successful
  1049.         buffer filled
  1050.        < 0       error code (see AX=CB01h)
  1051.  
  1052. Format of external data block:
  1053. Offset    Size    Description
  1054.  00h    BYTE    CAS major version
  1055.  01h    BYTE    CAS minor version
  1056.  02h 68 BYTEs    ASCIZ path to directory containing CAS software, ends in slash
  1057.  46h 13 BYTEs    ASCIZ name of current phonebook (in CAS directory)
  1058.  53h 13 BYTEs    ASCIZ name of current logo file (in CAS directory)
  1059.  60h 32 BYTEs    ASCIZ default sender name
  1060.  80h 21 BYTEs    ASCIZ CCITT identification of fax device
  1061.  95h 107 BYTEs    reserved
  1062. --------F-2FCB0F-----------------------------
  1063. INT 2F - Communicating Applications Specification - GET/SET AUTORECEIVE
  1064.     AX = CB0Fh
  1065.     DL = subfunction
  1066.         00h get current autoreceive state
  1067.         01h set autoreceive state
  1068.         DH = number of rings before answer, 00h = never
  1069. Return: AX = 0000h autoreceive disabled
  1070.        = N       number of rings before answer
  1071.        < 0       error code (see AX=CB01h)
  1072. --------F-2FCB10-----------------------------
  1073. INT 2F - Communicating Applications Specification - GET CURRENT EVENT STATUS
  1074.     AX = CB10h
  1075.     DS:DX -> 512-byte buffer
  1076. Return: AX = 0000h successful
  1077.         BX = event handle of current event or negative error code if
  1078.             no current event
  1079.         buffer filled
  1080.        < 0       error code (see AX=CB01h)
  1081. SeeAlso: AX=CB02h,AX=CB0Dh
  1082.  
  1083. Format of status area:
  1084. Offset    Size    Description
  1085.  00h    BYTE    event type
  1086.         00h send
  1087.         01h receive
  1088.         02h polled send
  1089.         03h polled receive
  1090.         04h to 7Fh reserved
  1091.         FFh serious hardware error
  1092.  01h    BYTE    transfer type
  1093.         00h 200x200 dpi, FAX mode
  1094.         01h 100x200 dpi, FAX mode
  1095.         02h file transfer mode
  1096.         03h to 7Fh reserved
  1097.  02h    WORD    event status 
  1098.         0000h completed successfully
  1099.         0001h waiting
  1100.         0002h number dialed
  1101.         0003h connected, sending
  1102.         0004h connected, receiving
  1103.         0005h aborted
  1104.         0006h to 007Fh reserved
  1105.         0080h to 7FFFh application-specific events
  1106.         8000h to FFFFh error codes
  1107.  04h    WORD    event time (packed DOS time format, see INT 21/AX=5700h)
  1108.  06h    WORD    event date (packed DOS date format, see INT 21/AX=5700h)
  1109.  08h    WORD    number of files to transfer, max 7FFFh
  1110.  0Ah    WORD    offset of file transfer record
  1111.  0Ch 47 BYTEs    ASCIZ phone number to call
  1112.  3Bh 64 BYTEs    ASCIZ application-specific tag string
  1113.  7Bh    BYTE    reserved (00h)
  1114.  7Ch    BYTE    connect time, seconds
  1115.  7Dh    BYTE    connect time, minutes
  1116.  7Eh    BYTE    connect time, hours
  1117.  7Fh    DWORD    total number of pages in all files
  1118.  83h    DWORD    pages already transmitted 
  1119.  87h    WORD    number of files already transmitted
  1120.  89h    BYTE    cover page flag
  1121.         00h don't transmit cover page
  1122.         01h transmit cover page
  1123.         02h to 7Fh reserved
  1124.  8Ah    WORD    total number of transmission errors
  1125.  8Ch 78 BYTEs    reserved (zeros)
  1126.  DAh 21 BYTEs    ASCIZ remote FAX's CCITT identification
  1127.  EFH 32 BYTEs    ASCIZ destination name
  1128. 10Fh 32 BYTEs    ASCIZ sender name
  1129. 12Fh 80 BYTEs    filename of PCX logo file (max 1780x800 pixels)
  1130. 17Fh 128 BYTEs    file transfer record for current event (see below)
  1131.  
  1132. Format of file transfer record:
  1133. Offset    Size    Description
  1134.  00h    BYTE    file type (ignored unless FAX)
  1135.         00h ASCII
  1136.         01h PCX
  1137.         02h DCX
  1138.         03h to 7Fh reserved
  1139.  01h    BYTE    text size for ASCII FAX file
  1140.         00h = 80 columns by 66 lines (11 inches)
  1141.         01h = 132 columns by 88 lines (11 inches)
  1142.         02h to 7Fh reserved
  1143.  02h    BYTE    status of file
  1144.         00h untouched
  1145.         01h opened
  1146.         02h moved
  1147.         03h deleted
  1148.         04h not yet received
  1149.         05h to 7Fh reserved
  1150.  03h    DWORD    bytes already transmitted
  1151.  07h    DWORD    file size in bytes
  1152.  0Bh    WORD    pages alread transmitted
  1153.  0Dh    WORD    number of pages in file
  1154.  0Fh 80 BYTEs    ASCIZ filename
  1155.  5Fh    BYTE    1/8 inch page length
  1156.         if page length below set to 01h through 7Fh, this value 
  1157.         specifies additional 1/8 inch increments to page length
  1158.  60h    BYTE    page length
  1159.         00h = 11 inches
  1160.         01h to 7Fh = page length is this number of inches plus value of
  1161.             1/8 inch field above
  1162.         80h to FEh reserved
  1163.         FFh = ASCII pages ending with formfeed
  1164.  61h 31 BYTEs    reserved (zeros)
  1165. --------F-2FCB11-----------------------------
  1166. INT 2F - Communicating Applications Specification - GET QUEUE STATUS
  1167.     AX = CB11h
  1168.     DL = queue to get status of
  1169.         00h task queue
  1170.         01h receive queue
  1171.         02h log queue
  1172.         03h send events (v1.2+)
  1173.         04h receive events (v1.2+)
  1174. Return: AX >= 0     total number of changes made to queue, modulo 32768
  1175.         BX = number of control files currently in queue
  1176.         CX = number of received files (zero for task and log queues)
  1177.     AX < 0    error code (see AX=CB01h)
  1178. SeeAlso: AX=CB12h
  1179. --------F-2FCB11DL03-------------------------
  1180. INT 2F - Communicating Applications Spec v1.2+ - GET NUMBER OF SEND EVENTS
  1181.     AX = CB11h
  1182.     DL = 03h
  1183. Return: AX = number of successful sends since resident manager started
  1184.     BX = number of unsuccessful sends, including warnings
  1185. SeeAlso: AX=CB11h/DL=04h
  1186. --------F-2FCB11DL04-------------------------
  1187. INT 2F - Communicating Applications Spec v1.2+ - GET NUMBER OF RECEIVE EVENTS
  1188.     AX = CB11h
  1189.     DL = 04h
  1190. Return:    AX = number of received file events since resident manager started
  1191.     BX = number of received FAX events
  1192. SeeAlso: AX=CB11h/DL=03h
  1193. --------F-2FCB12-----------------------------
  1194. INT 2F - Communicating Applications Specification - GET HARDWARE STATUS
  1195.     AX = CB12h
  1196.     DS:DX -> 128-byte status buffer (see below)
  1197. Return: AX = 0000h successful
  1198.         buffer filled with hardware-dependent status information
  1199.        < 0       error code (see AX=CB01h)
  1200. SeeAlso: AX=CB10h,AX=CB11h
  1201.  
  1202. Format of status buffer for Intel Connection CoProcessor:
  1203. Offset    Size    Description
  1204.  00h    BYTE    Connection CoProcessor connection status flags (see below)
  1205.  01h    BYTE    number of kilobytes of free buffer space
  1206.  02h    BYTE    page buffer status
  1207.         bit 7: Connection CoProcessor has documents to send
  1208.         bits 6-0: number of pages in buffer
  1209.  03h    BYTE    number of retries left for dialing number
  1210.  04h    BYTE    page number to retransmit
  1211.  05h    BYTE    communications status (see below)
  1212.  06h    BYTE    baud rate
  1213.         bit 7: reserved
  1214.         bits 6-4: baud rate
  1215.             000 = 300 baud    (V.21 SDLC or HDLC mode)
  1216.             100 = 2400 baud (V.27 ter)
  1217.             101 = 4800 baud (V.27 ter)
  1218.             110 = 7200 baud (V.29)
  1219.             111 = 9600 baud (V.29)
  1220.         bits 3-0: reserved, should be 0110
  1221.  07h  3 BYTEs    reserved
  1222.  0Ah    BYTE    Connection CoProcessor hardware status (see below)
  1223.  0Bh    BYTE    Connection CoProcessor switch states (see below)
  1224.  0Ch    BYTE    communications flags (see below)
  1225.  0Dh    BYTE    reserved
  1226.  0Eh    WORD    error count (only valid while busy, reset when idle)
  1227.  10h    DWORD    size of nonstandard format (NSF) file in bytes
  1228.  14h    BYTE    'A' if Connection CoProcessor board present
  1229.  15h  9 BYTEs    reserved
  1230.  1Eh 21 BYTEs    ASCIZ CCITT identification
  1231.  33h 77 BYTEs    reserved
  1232. Note:    the Intel Connection CoProcessor and SatisFAXtion may be distinguished
  1233.       by examining the byte at offset 14h
  1234.  
  1235. Format of status buffer for Intel SatisFAXtion board:
  1236. Offset    Size    Description
  1237.  00h    BYTE    SatisFAXtion connection status flags (see below)
  1238.  01h    BYTE    SatisFAXtion board state (see below)
  1239.  02h    BYTE    number of KB free in buffer
  1240.  03h    BYTE    number of pages or files in buffer
  1241.  04h    BYTE    number of redials remaining on current number
  1242.  05h    BYTE    FAX page number to retransmit
  1243.  06h    BYTE    current page/file in block transfer
  1244.  07h    BYTE    number of rings received (only if auto-answer enabled)
  1245.  08h    WORD    error count
  1246.  0Ah    DWORD    length of file being transferred
  1247.  0Eh  6 BYTEs    reserved
  1248.  14h    BYTE    'B' if SatisFAXtion board present
  1249.  15h 13 BYTEs    ASCIZ transfer agent name
  1250.  22h  5 BYTEs    ASCIZ transfer agent version number
  1251.  27h 13 BYTEs    ASCIZ resident loader name
  1252.  34h  5 BYTEs    ASCIZ resident loader version number
  1253.  39h 21 BYTEs    ASCIZ remote CSID
  1254.  4Eh 13 BYTEs    ASCIZ resident manager name
  1255.  5Bh  5 BYTEs    ASCIZ resident manager version number
  1256.  60h 32 BYTEs    reserved
  1257. Note:    the Intel Connection CoProcessor and SatisFAXtion may be distinguished
  1258.       by examining the byte at offset 14h
  1259.  
  1260. Bitfields for Connection CoProcessor connection status flags:
  1261.  bit 7    hardware busy sending or receiving
  1262.  bit 6    last page of data
  1263.  bit 5    no data on current page
  1264.  bit 4    retransmit request for current page being transmitted
  1265.  bit 3    NSF (nonstandard file) mode active
  1266.  bits 2-0 reserved
  1267.  
  1268. Bitfields for communications status:
  1269.  bit 7    originating call
  1270.  bit 6    FAX message to be sent
  1271.  bit 5    on line
  1272.  bit 4    ring detected and receive enabled
  1273.  bit 3    buffer dumped on receive
  1274.  bits 2-0    hardware sequence state
  1275.         000 idle
  1276.         001 dial
  1277.         010 answer
  1278.         011 transmit
  1279.         100 receive
  1280.         101 pre-message
  1281.         110 post-message
  1282.         111 disconnect
  1283.  
  1284. Bitfields for Connection CoProcessor hardware status:
  1285.  bit 7    modem option installed
  1286.  bit 6    Connection CoProcessor has control of DAA (not latched)
  1287.  bit 5    on line (not latched)
  1288.  bit 4    ring detected (not latched)
  1289.  bit 3    data in command buffer (not latched)
  1290.  bit 2    set if using DMA channel 1, clear if using DMA channel 3
  1291.  bit 1    line length compensation bit 1 set (not latched)
  1292.  bit 0    line length compensation bit 0 set (not latched)
  1293.  
  1294. Bitfields for Connection CoProcessor switch states:
  1295.  bit 7: reserved
  1296.  bit 6: unused
  1297.  bit 5: spare switch open
  1298.  bit 4: FAX ADR1 switch open
  1299.  bit 3: FAX ADR0 switch open
  1300.  bit 2: alternate interrupt switch open
  1301.  bit 1: COM SEL 1 switch open
  1302.  bit 0: COM SEL 0 switch open
  1303. Note: valid combinations of bits 0-2 are
  1304.     000  COM2 IRQ3 IObase 2F8h
  1305.     001  COM1 IRQ4 IObase 3F8h
  1306.     010  COM4 IRQ3 IObase 2E8h
  1307.     011  COM3 IRQ4 IObase 3E8h
  1308.     110  COM4 IRQ2 IObase 2E8h
  1309.     111  COM3 IRQ5 IObase 3E8h
  1310.  
  1311. Bitfields for communications flags:
  1312.  bit 7    reserved
  1313.  bit 6    auxiliary relay forced ON
  1314.  bit 5    modem select relay forced ON
  1315.  bit 4    offhook relay forced ON
  1316.  bit 3    9600 bps enabled
  1317.  bit 2    7200 bps enabled
  1318.  bit 1    4800 bps enabled
  1319.  bit 0    2400 bps enabled
  1320.  
  1321. Bitfields for SatisFAXtion connection status flags:
  1322.  bit 7    busy in T.30 CCITT fax protocol
  1323.  bit 6    data on current page/file (only used for block xfers)
  1324.  bit 5    retransmission of last page requested
  1325.  bit 4    in file transfer mode
  1326.  bit 3    data in buffer
  1327.  bit 2    data buffer dumped on receive
  1328.  bit 1    200x100 dpi resolution instead of 200x200 dpi
  1329.  bit 0    data modem in use, FAX image modem not available
  1330.  
  1331. Bitfields for SatisFAXtion board state:
  1332.  bit 7    reserved
  1333.  bit 6    handset jack active, data and FAX modems not available
  1334.  bits 5-3  current bit rate
  1335.         000     300 bps (V.21 HDLC)
  1336.         100 2400 bps (V.27 ter)
  1337.         101 4800 bps (V.27 ter)
  1338.         110 7200 bps (V.29)
  1339.         111 9600 bps (V.29)
  1340.  bits 2-0  T.30 CCITT protocol state
  1341.          000 idle
  1342.         001 dialing
  1343.         010 answering
  1344.         011 transmitting
  1345.         100 receiving
  1346.         101 pre-message
  1347.         110 post-message
  1348.         111 disconnect
  1349. --------F-2FCB13DL00-------------------------
  1350. INT 2F - Communicating Applications Specification - GET DIAGNOSTICS RESULTS
  1351.     AX = CB13h
  1352.     DL = 00h
  1353. Return: AX = 0040h in progress
  1354.        >= 0       passed
  1355.        < 0       hardware-dependent failure code (see below)
  1356. SeeAlso: AX=CB13h/DL=01h
  1357.  
  1358. Intel Connection CoProcessor failure codes:
  1359.  bit 3    9600 bps FAX modem module failed
  1360.  bit 2    SDLC chip failed
  1361.  bit 1    RAM failed
  1362.  bit 0    ROM checksum failed
  1363.  
  1364. Intel SatisFAXtion failure codes:
  1365.  bit 1    2400 bps data modem failed
  1366.  bit 0    9600 bps FAX modem failed
  1367. --------F-2FCB13DL01-------------------------
  1368. INT 2F - Communicating Applications Specification - START DIAGNOSTICS
  1369.     AX = CB13h
  1370.     DL = 01h
  1371. Return: AX = 0000h successfully started
  1372.        < 0       error code (see AX=CB01h)
  1373. SeeAlso: AX=CB13h/DL=00h
  1374. --------F-2FCB14-----------------------------
  1375. INT 2F - Communicating Applications Specification - MOVE RECEIVED FILE
  1376.     AX = CB14h
  1377.     BX = event handle
  1378.     CX = receive file number
  1379.          0001h first received file
  1380.          N       Nth received file
  1381.     DS:DX -> ASCIZ string specifying new name for file (must not exist)
  1382. Return: AX = 0000h successful
  1383.        < 0       error code (see AX=CB01h)
  1384. --------F-2FCB15-----------------------------
  1385. INT 2F - Communicating Applications Specification - SUBMIT FILE TO SEND
  1386.     AX = CB15h
  1387.     DS:DX -> variable-length data area (see below)
  1388. Return: AX >= 0    event handle
  1389.        < 0    error code (see AX=CB01h)
  1390. SeeAlso: AX=CB01h
  1391.  
  1392. Format of data area:
  1393. Offset    Size    Description
  1394.  00h    BYTE    transfer type
  1395.         00h = 200x200 dpi, fax mode
  1396.         01h = 100x200 dpi, fax mode
  1397.         02h = file transfer mode
  1398.         03h to 7Fh reserved
  1399.  01h    BYTE    text size
  1400.         00h = 80 columns
  1401.         01h = 132 columns
  1402.         02h to 7Fh reserved
  1403.  02h    WORD    time to send (DOS packed time format, see INT 21/AX=5700h)
  1404.  04h    WORD    date to send (DOS packed date format, see INT 21/AX=5700h)
  1405.  06h 32 BYTEs    ASCIZ destination name
  1406.  26h 80 BYTEs    ASCIZ name of file to send
  1407.  76h 47 BYTEs    ASCIZ phone number to dial
  1408.  A5h 64 BYTEs    ASCIZ application-specific tag string
  1409.  E5h    BYTE    reserved (00h)
  1410.  E6h    BYTE    cover page
  1411.         00h don't send cover page
  1412.         01h send cover page
  1413.         02h to 7Fh reserved
  1414.  E7h 23 BYTEs    reserved (zeros)
  1415.  FEh variable    ASCIZ string containing text of cover page (if cover page flag
  1416.         set to 01h)
  1417. --------F-2FCB16BX1234-----------------------
  1418. INT 2F - Communicating Applications Spec v1.2+ - UNLOAD RESIDENT MANAGER
  1419.     AX = CB16h
  1420.     BX = 1234h
  1421.     CX = 5678h
  1422.     DX = 9ABCh
  1423. Return: AX = 0000h successful
  1424.        < 0       error code
  1425. Note:    the MTEZ XpressFax CASMGR ignores the values in BX,CX, and DX
  1426. SeeAlso: AX=C000h"MTEZ",AX=CB00h
  1427. --------F-2FCB17-----------------------------
  1428. INT 2F - Communicating Applications Spec v1.2+ - SET COVER PAGE STATUS
  1429.     AX = CB17h
  1430.     BX = event handle
  1431.     CL = cover page status
  1432.         00h not read
  1433.         01h read by user
  1434. Return: AX = 0000h successful
  1435.        < 0       error code
  1436. --------F-2FCB80-----------------------------
  1437. INT 2F - Intel SatisFAXtion CASMGR - ???
  1438.     AX = CB80h
  1439.     ???
  1440. Return: ???
  1441. --------F-2FCB81-----------------------------
  1442. INT 2F - Intel SatisFAXtion CASMGR - ???
  1443.     AX = CB81h
  1444.     ???
  1445. Return: ???
  1446. --------F-2FCB82-----------------------------
  1447. INT 2F - Intel SatisFAXtion CASMGR - ???
  1448.     AX = CB82h
  1449.     ???
  1450. Return: ???
  1451. --------F-2FCBDCBL56-------------------------
  1452. INT 2F - Comwave Microfax Specification - GET STATUS ARRAY
  1453.     AX = CBDCh
  1454.     BL = 56h
  1455.     BH = line number (starts with 1)
  1456.     CX:DX -> 32-byte status buffer or 80 character string
  1457. Return: AX = number of cards installed, or FFFFh on error
  1458. Program: Comwave manufacturers the Microfax line of fax cards which are a high-
  1459.       performance multi-card FAX solution for OEMs.
  1460. Note:    defaults to AH=CBh but can be changed
  1461. SeeAlso: AX=CBDDh,AX=DA00h
  1462. --------F-2FCBDDBL56-------------------------
  1463. INT 2F - Comwave Microfax Specification - COMMAND SUBMISSION
  1464.     AX = CBDDh
  1465.     BL = 56h
  1466.     BH = ?
  1467.     CX:DX -> command to execute
  1468. Return: AX = status
  1469.         0000h success
  1470.         FFFFh on error
  1471. SeeAlso: AH=2Ah,AX=CBDCh,AX=80FBh
  1472. --------c-2FCC--SI5453-----------------------
  1473. INT 2F U - Qualitas Qcache v4.00
  1474.     AH = CCh
  1475.     SI = 5453h or 7473h
  1476.     AL = ???
  1477.     DL = 00h or ???
  1478. Return: SI = 7473h
  1479.     ???
  1480. ----------2FCD00-----------------------------
  1481. INT 2F - Intel Image Processing Interface - INSTALLATION CHECK
  1482.     AX = CD00h
  1483. Return: AL = 00h not installed, OK to install
  1484.          01h not installed, not OK to install
  1485.          FFh installed
  1486. SeeAlso: AX=CD02h"Image"
  1487. --------P-2FCD00-----------------------------
  1488. INT 2F - LaserPort Interface - INSTALLATION CHECK
  1489.     AX = CD00h
  1490. Return: AL = status
  1491.         FFh installed
  1492. SeeAlso: AX=CD0Fh"LaserPort"
  1493. --------U-2FCD00-----------------------------
  1494. INT 2F - SWELL.EXE - INSTALLATION CHECK
  1495.     AX = CD00h
  1496. Return: AX = 00FFh installed
  1497.         BH = major version
  1498.         BL = minor version
  1499. Program: SWELL.EXE is a TSR which swaps programs to disk when they EXEC a child
  1500.       process with INT 21/AH=4Bh
  1501. ----------2FCD01-----------------------------
  1502. INT 2F - Intel Image Processing Interface - SET DEVICE NAME
  1503.     AX = CD01h
  1504.     CX:BX -> ASCIZ character device name ("LPTn", "COMn", "PRN")
  1505. Return: AL = 00h successful
  1506.         CX:BX -> internal character device name
  1507.        = 80h error
  1508. --------U-2FCD01-----------------------------
  1509. INT 2F - SWELL.EXE - SUSPEND ONCE
  1510.     AX = CD01h
  1511. Return: AX = 0000h
  1512. SeeAlso: AX=CD02h"SWELL"
  1513. ----------2FCD02-----------------------------
  1514. INT 2F - Intel Image Processing Interface - GET VERSION NUMBER
  1515.     AX = CD02h
  1516. Return: AL = 00h/01h successful
  1517.         BH = major version number (BCD)
  1518.         BL = minor version number (BCD)
  1519.        = 80h error
  1520. Note:    if return AL = 01h, the IPI supports network redirection
  1521. SeeAlso: AX=CD00h"Image"
  1522. --------U-2FCD02-----------------------------
  1523. INT 2F - SWELL.EXE - SUSPEND
  1524.     AX = CD02h
  1525. Return: AX = 0000h
  1526. SeeAlso: AX=CD03h"SWELL"
  1527. ----------2FCD03-----------------------------
  1528. INT 2F - Intel Image Processing Interface - SELECT SCAN LINE
  1529.     AX = CD03h
  1530.     BX = scan line
  1531.     CX = requested density in dots per inch (300, 600, or 1200)
  1532. Return: AL = 00h succesful
  1533.         CX = density at which scan line was mapped
  1534.         ES:DI -> start of scan line
  1535.     AL = 80h unsuccessful
  1536.        = 81h scan line out of range
  1537.        = 82h unsupported scan line density
  1538.        = 83h out of memory
  1539. SeeAlso: AX=CD04h"Image"
  1540. --------U-2FCD03-----------------------------
  1541. INT 2F - SWELL.EXE - ACTIVATE
  1542.     AX = CD03h
  1543. Return: AX = 0000h
  1544. SeeAlso: AX=CD02h"SWELL"
  1545. ----------2FCD04-----------------------------
  1546. INT 2F - Intel Image Processing Interface - MOVE BITMAP TO SCANLINE
  1547.     AX = CD04h
  1548.     CX:BX -> structure (see below)
  1549. Return: AL = 00h successful
  1550.        = 80h unsuccessful
  1551.        = 81h scan line out of range
  1552.        = 82h unsupported scan line density
  1553.        = 83h out of memory
  1554.        = 84h unrecognized source
  1555.        = 85h initialization error
  1556. SeeAlso: AX=CD03h"Image"
  1557.  
  1558. Format of structure:
  1559. Offset    Size    Description
  1560.  00h    WORD    image source (0 = conventional memory, 1 = expanded memory)
  1561.  02h    DWORD    pointer to image data
  1562.  06h    WORD    scan line on which to place
  1563.  08h    WORD    bit offset from start of scan line at which to place
  1564.  0Ah    WORD    density of bitmap data (300, 600, or 1200 dpi)
  1565.  0Ch    WORD    width in bits of data
  1566.  0Eh    WORD    source logical page number
  1567.  10h    WORD    source handle (only if source in expanded memory)
  1568.  12h    WORD    source offset (only if source in expanded memory)
  1569. --------U-2FCD04-----------------------------
  1570. INT 2F - SWELL.EXE - TURN OFF VERBOSE MODE
  1571.     AX = CD04h
  1572. Return: AX = 0000h
  1573. SeeAlso: AX=CD05h"SWELL"
  1574. ----------2FCD05-----------------------------
  1575. INT 2F - Intel Image Processing Interface - PRINT PAGE
  1576.     AX = CD05h
  1577. Return: AL = 00h successful
  1578.        = 80h unsuccessful
  1579. Note:    page image is retained, so multiple calls will print multiple copies of
  1580.       the page
  1581. SeeAlso: AX=CD06h"Image"
  1582. --------U-2FCD05-----------------------------
  1583. INT 2F - SWELL.EXE - TURN ON VERBOSE MODE
  1584.     AX = CD05h
  1585. Return: AX = 0000h
  1586. SeeAlso: AX=CD04h"SWELL"
  1587. ----------2FCD06-----------------------------
  1588. INT 2F - Intel Image Processing Interface - CLEAR PAGE
  1589.     AX = CD06h
  1590. Return: AL = 00h successful
  1591.        = 80h unsuccessful
  1592. Note:    palette is reset to default
  1593. SeeAlso: AX=CD09h"Image"
  1594. --------U-2FCD06-----------------------------
  1595. INT 2F - SWELL.EXE - UNINSTALL
  1596.     AX = CD06h
  1597. Return: AX = 0000h uninstalled
  1598.        = 8002h programs still swapped, not uninstalled
  1599. ----------2FCD07-----------------------------
  1600. INT 2F - Intel Image Processing Interface - reserved
  1601.     AX = CD07h
  1602. --------U-2FCD07-----------------------------
  1603. INT 2F - SWELL.EXE - GET INFO
  1604.     AX = CD07h
  1605.     ES:BX -> 32-byte buffer for info
  1606. Return: AX = 0000h successful
  1607.         ES:BX buffer filled
  1608.        = 8001h buffer wrong size
  1609.  
  1610. Format of info buffer:
  1611. Offset    Size    Description
  1612.  00h    WORD    20h  (total size of buffer)
  1613.  02h    BYTE    suspend-once mode active if nonzero
  1614.  03h    BYTE    00h active, 01h suspended
  1615.  04h    BYTE    00h quiet, 01h verbose
  1616.  05h    BYTE    "Borland support" (allowing INT 21/AX=4B01h) on if nonzero
  1617.  06h 26 BYTEs    unused???
  1618. ----------2FCD08-----------------------------
  1619. INT 2F - Intel Image Processing Interface - SCREEN IMAGE
  1620.     AX = CD08h
  1621.     CX:BX -> structure (see below)
  1622. Return: AL = 00h successful
  1623.        = 80h unsuccessful
  1624.        = 81h scan line out of range
  1625.        = 82h unsupported scan line density
  1626.        = 83h out of memory
  1627.        = 84h unrecognized source
  1628.        = 85h initialization error
  1629. SeeAlso: AX=CD05h"Image",AX=CD09h"Image"
  1630.  
  1631. Format of structure:
  1632. Offset    Size    Description
  1633.  00h    WORD    image source (0 = conventional memory, 1 = expanded memory)
  1634.  02h    DWORD    pointer to image data
  1635.  06h    WORD    horizontal position on paper of left edge (in 1200 dpi units)
  1636.  08h    WORD    vertical position on paper of top edge (in 1200 dpi units)
  1637.  0Ah    WORD    left cropping (currently must be zero)
  1638.  0Ch    WORD    top cropping (currently must be zero)
  1639.  0Eh    WORD    width (currently must be 8000h)
  1640.  10h    WORD    height (currently must be 8000h)
  1641.  12h    WORD    horizontal size of image in 1200 dpi units
  1642.  14h    WORD    vertical size of image in 1200 dpi units
  1643.  16h    WORD    aspect ratio (currently reserved)
  1644.  18h    WORD    initialization flag (if 01h, initialization is performed)
  1645.  1Ah    WORD    pixels per line of source data
  1646.  1Ch    WORD    number of scan lines in source data
  1647.  1Eh    WORD    number of scan lines in packet
  1648.  20h    WORD    bits per pixel (1,2,4,6, or 8)
  1649.  22h    WORD    pixels per byte (1,2,4, or 8)
  1650.  24h    WORD    compression type (currently only 00h [uncompressed] supported)
  1651.  26h    WORD    source page number (if in expanded memory)
  1652.  28h    WORD    source handle (if in expanded memory)
  1653.  2Ah    WORD    source offset (if in expanded memory)
  1654. --------U-2FCD08-----------------------------
  1655. INT 2F - SWELL.EXE - UNUSED
  1656.     AX = CD08h
  1657. Return: AX = FFFFh (error)
  1658. ----------2FCD09-----------------------------
  1659. INT 2F - Intel Image Processing Interface - LOAD SCREEN
  1660.     AX = CD09h
  1661.     CX:BX -> structure (see below)
  1662. Return: AL = 00h successful
  1663.        = 80h unsuccessful
  1664. SeeAlso: AX=CD06h"Image Processing",AX=CD0Ah"Image Processing"
  1665.  
  1666. Format of structure:
  1667. Offset    Size    Description
  1668.  00h    BYTE    style
  1669.         44h ('D') diamond style
  1670.         4Ch ('L') line style
  1671.  01h    BYTE    reserved (00h)
  1672.  02h    WORD    frequency in lines per inch [sic]
  1673.         currently, coerced to nearest of 50, 60, 68, 70, 75, 85, or 100
  1674.  04h    WORD    screen angle in degrees (-360 to 360)
  1675.         currently coerced to nearest of -45, 0, 45, or 90
  1676. --------U-2FCD09-----------------------------
  1677. INT 2F - SWELL.EXE - TURN OFF "BORLAND SUPPORT"
  1678.     AX = CD09h
  1679. Return: AX = 0000h
  1680. SeeAlso: AX=CD0Ah"SWELL"
  1681. ----------2FCD0A-----------------------------
  1682. INT 2F - Intel Image Processing Interface - LOAD PALETTE
  1683.     AX = CD0Ah
  1684.     CX:BX -> palette structure (see below)
  1685. Return: AL = 00h successful
  1686.        = 80h unsuccessful
  1687. SeeAlso: AX=CD09h"Image Processing"
  1688.  
  1689. Format of palette structure:
  1690. Offset    Size    Description
  1691.  00h    BYTE    bits per pixel for which palette is to be used (1,2,4,6, or 8)
  1692.  01h    2**N    palette translation values, one per possible pixel value
  1693. --------U-2FCD0A-----------------------------
  1694. INT 2F - SWELL.EXE - TURN ON "BORLAND SUPPORT"
  1695.     AX = CD0Ah
  1696. Return: AX = 0000h
  1697. SeeAlso: AX=CD09h"SWELL"
  1698. --------P-2FCD0F-----------------------------
  1699. INT 2F - LaserPort Interface - EXECUTE FUNCTION
  1700.     AX = CD0Fh
  1701.     BL = function
  1702.         01h enable
  1703.         02h disable
  1704.         03h ???
  1705. Return: AL = status
  1706.         00h success
  1707. SeeAlso: AX=CD00h"LaserPort"
  1708. --------K-2FCF00-----------------------------
  1709. INT 2F - TEMPLEXX 1.0 - INSTALLATION CHECK
  1710.     AX = CF00h
  1711. Return: AL = FFh if installed
  1712. Program: TEMPLEXX is a popup keyboard template by Henson Scientific, Inc.
  1713. Note:    values in AL other than 00h cause an immediate return without modifying
  1714.       any registers
  1715. --------G-2FD000-----------------------------
  1716. INT 2F - MDEBUG display driver - GET DRIVER STATUS
  1717.     AX = D000h
  1718. Return: CF set on error
  1719.         all other registers must be unchanged)
  1720.     CF clear if successful
  1721.         AL = FFh
  1722.         AH = driver semaphor
  1723.         00h driver is not active
  1724.         01h driver is active
  1725.         BX = CS of the driver
  1726.         CX = driver version (CH = major, CL = minor, must be >= 013Ch)
  1727.         DL = buffer semaphor
  1728.         00h driver is not pending
  1729.         01h driver is pending between functions 02h and 03h
  1730.         DH = show semaphor
  1731.         00h driver is not pending
  1732.         01h driver is pending between functions 04h and 05h
  1733. Program: MDEBUG is a shareware memory-resident debugging tool by Bernd
  1734.       Schemmer, including a memory monitor, an interpreter and a
  1735.       disassembler
  1736. Notes:    MDEBUG can use any two consecutive multiplex numbers between C0h and
  1737.       FFh; the default is D0h for the display driver and D1h for the
  1738.       command driver (see INT 60/AH=00h"MDEBUG" for the actual multiplex
  1739.       numbers used)
  1740.     this function MUST be reentrant, as MDEBUG calls it after every popup
  1741.       before any other actions.  The handler should not change any
  1742.       registers if the display is in an unsupported mode or in a mode
  1743.       MDEBUG supports itself, e.g. a normal text mode with at least 80x25
  1744.       characters (i.e. 80x43 or 132x44 (v1.60+)). In this case MDEBUG will
  1745.       not call any of the other functions for this popup session.
  1746.     MDEBUG will not call the other functions if the returned version is
  1747.       less than the actual version of MDEBUG.
  1748.     if the driver is reentrant, DL and DH should be 00h
  1749. SeeAlso: AX=D001h,AX=D002h,AX=D003h,AX=D004h,AX=D005h
  1750. --------M-2FD000-----------------------------
  1751. INT 2F - ZWmous - INSTALLATION CHECK
  1752.     AX = D000h
  1753. Return: AX = 5A57h ("ZW") if installed
  1754.         BX = segment of resident code
  1755. Program: ZWmous is a shareware TSR by Zen Wu which permits the use of a mouse
  1756.       with many non-mouse applications by entering the letter under the
  1757.       mouse cursor on button presses
  1758. SeeAlso: INT 33/AX=0003h
  1759. --------N-2FD000-----------------------------
  1760. INT 2F - Lotus CD/Networker - INSTALLATION CHECK
  1761.     AX = D000h
  1762. Return: AL = FF if CD/Networker TSR is loaded
  1763.     BX = 4D44h ("MD") signature
  1764.     CX = Windows mode word (from INT 2F/AX=1600h) at time of TSR load
  1765.     DX = bitmap identifying all loaded CD/Networker TSRs.
  1766. Notes:    INT 2F/AH=D0h is used by CD/Networker to communicate between a
  1767.       resident redirector TSR and a transient program that controls the
  1768.       TSR's CD-ROM drive emulation (volume attachments, caching, etc).
  1769.     At present there is only one CD/Networker TSR; the bitmap always = 4.
  1770. SeeAlso: AX=D002h"Lotus",INT 2F/AX=1500h"CD-ROM"
  1771. --------G-2FD001-----------------------------
  1772. INT 2F - MDEBUG display driver - INITIALIZE DRIVER
  1773.     AX = D001h
  1774. Return: CF set on error
  1775.     AL = driver semaphor
  1776.     AH = buffer semaphor
  1777. Notes:    MDEBUG calls this function after every succesful call of the function
  1778.       00h. The function should reset all internal data and the status of
  1779.       the driver. If this function returns an error, MDEBUG will not call
  1780.       the other functions in this popup session.
  1781.     MDEBUG can use any two consecutive multiplex numbers between C0h and
  1782.       FFh; the default is D0h for the display driver and D1h for the
  1783.       command driver
  1784. SeeAlso: AX=D000h
  1785. --------G-2FD002-----------------------------
  1786. INT 2F - MDEBUG display driver - SAVE GRAPHIC DATA
  1787.     AX = D002h
  1788. Return: CF set on error
  1789.     CF clear if successful
  1790.         display memory saved and display switched to one of the text modes
  1791.           02h, 03h or 07h.
  1792. Note:    MDEBUG calls this function only once every popup session before
  1793.       displaying its windows.
  1794. SeeAlso: AX=D000h,AX=D003h
  1795. --------N-2FD002BX4D44-----------------------
  1796. INT 2F - Multiplex - Lotus CD/Networker GET DATA AREA
  1797.     AX = D002h
  1798.     BX = 4D44h
  1799.     DX = bitmap identifying one loaded CD/Networker TSR
  1800. Return: ES:DI -> data area owned by TSR
  1801. Note:    the format of the data area changes with each minor revision, so it
  1802.       cannot be counted on
  1803. SeeAlso: AX=D000h"Lotus"
  1804. --------G-2FD003-----------------------------
  1805. INT 2F - MDEBUG display driver - RESTORE GRAPHIC DATA
  1806.     AX = D003h
  1807. Return: CF set on error
  1808.     CF clear if successful
  1809.         display restored to the mode it was in before calling AX=D002h and
  1810.           the display memory is restored
  1811. Note:    MDEBUG calls this function only once every popup session just before
  1812.      it exits to normal DOS.
  1813. SeeAlso: AX=D000h,AX=D002h
  1814. --------G-2FD004-----------------------------
  1815. INT 2F - MDEBUG display driver - SHOW SAVED DATA
  1816.     AX = D004h
  1817. Return: CF set on error
  1818.     CF clear if successful
  1819.         display switched to mode it was in before calling AX=D002h and the
  1820.           display memory is restored
  1821. Note:    This function needn't save the display memory before changing it.
  1822. SeeAlso: AX=D000h,AX=D005h
  1823. --------G-2FD005-----------------------------
  1824. INT 2F - MDEBUG display driver - SWITCH BACK TO TEXT SCREEN
  1825.     AX = D005h
  1826. Return: CF set on error
  1827.     CF clear if successful
  1828.         display restored to mode it was in before calling AX=D004h
  1829. Note:    This function needn't save or change the display memory
  1830. SeeAlso: AX=D000h,AX=D004h
  1831. --------G-2FD0-------------------------------
  1832. INT 2F - MDEBUG display driver - RESERVED FUNCTION NUMBERS
  1833.     AH = D0h
  1834.     AL = 06h-7Fh
  1835. Note:    these functions are reserved for future use
  1836. --------G-2FD0-------------------------------
  1837. INT 2F - MDEBUG display driver - USER DEFINED FUNCTION NUMBERS
  1838.     AH = D0h
  1839.     AL = 80h-FFh
  1840. Note:    these functions numbers are reserved for user defined features (e.g.
  1841.       communication between the transient und resident parts of the driver)
  1842. --------G-2FD100-----------------------------
  1843. INT 2F C - MDEBUG command driver - GET STATUS
  1844.     AX = D100h
  1845.     BX = version of MDEBUG (BH = major, BL = minor)
  1846.     CX = command driver counter
  1847. ---v1.60+---
  1848.     DS:SI -> MDEBUG identification table (see below)
  1849.     ES = segment of display memory used by MDEBUG
  1850.     DI = size of video mode used by MDEBUG
  1851.         (high byte = lines, low byte = columns)
  1852. Return: DL = FFh
  1853.     BX = version number of the driver if it is less than the version in BX,
  1854.          else unchanged
  1855.     CX incremented
  1856. Program: MDEBUG is a shareware memory-resident debugging tool by Bernd
  1857.       Schemmer, including a memory monitor, an interpreter, and a
  1858.       disassembler
  1859. Notes:    called by MDEBUG at start of popup session; if the version number
  1860.       returned in BX is less than 1.52 (1.60 for MDEBUG v1.70), MDEBUG will
  1861.       not call any of the other functions during this popup session
  1862.     MDEBUG can use any two consecutive multiplex numbers between C0h and
  1863.       FFh; the default is D0h for the display driver and D1h for the
  1864.       command driver (see INT 60/AH=00h"MDEBUG" for the multiplex numbers
  1865.       actually used)
  1866.     this function must end with a far call to the old INT 2F handler after
  1867.       changing the registers
  1868.     this function MUST be reentrant
  1869.     command drivers must also declare the following data at the given
  1870.       offsets in the code segment
  1871.         100h  3 BYTEs    JMP-command in .COM-files
  1872.         103h    BYTE    NOP-command (90h)
  1873.         104h 26 BYTEs    signature "Kommandotreiber für MDEBUG"
  1874.         11Eh 12 BYTEs    name of driver, e.g. "MDHISDRV.COM"
  1875.                 each driver must have a unique name
  1876.     MDEBUG will pass every key and command to the command driver(s) before
  1877.       checking for a valid internal command
  1878. SeeAlso: AX=D000h,AX=D101h
  1879.  
  1880. Format of MDEBUG identification table:
  1881. Offset    Size    Description
  1882.  -2    WORD    entry offset
  1883.  00h    WORD    CS of MDEBUG
  1884.  02h    DWORD    old INT 08h vector
  1885.  06h    DWORD    old INT 09h vector
  1886.  0Ah    DWORD    address INT 16h routine used by MDEBUG
  1887.  0Eh    BYTE    length of version string
  1888.  0Fh  N BYTEs    version string
  1889. --------G-2FD101-----------------------------
  1890. INT 2F - MDEBUG command driver - INITIALIZE DRIVER
  1891.     AX = D101h
  1892.     CX = command driver counter
  1893. Return: DL = FFh if successful
  1894.         CX incremented
  1895.          else error: all registers unchanged
  1896. Note:    this function must end with a  far call to the old INT 2F handler after
  1897.       changing the registers
  1898.     this function must be reentrant
  1899. --------G-2FD102-----------------------------
  1900. INT 2F - MDEBUG command driver - EXECUTE INTERPRETER COMMAND
  1901.     AX = D102h
  1902.     BL = first character of the interpreter command
  1903.     BH = last character of the interpreter command (or blank)
  1904.     DS:SI -> parameter for the interpreter command as ASCIZ string
  1905.     DS:DI -> MDEBUG data structure (see below)
  1906. Return: AL = FFh
  1907.     CF set on error
  1908.         AH = error number
  1909.         01h syntax error
  1910.         02h first shell of the command.com is activ
  1911.         03h esc pressed
  1912.         04h break pressed
  1913.         05h DOS is busy
  1914.         06h command ended
  1915.         07h division by zero
  1916.         08h invalid display driver
  1917.         09h invalid command driver
  1918.         0Ah error 8 and 9
  1919.         0Bh unknown error
  1920.         0Ch new error
  1921.             DS:SI -> ASCIZ error message (max 30 characters)
  1922.            else unknown error
  1923.     CF clear if successful
  1924.         AH = return code
  1925.         00h continue processing the command line
  1926.         01h leave MDEBUG popup session
  1927.         02h leave MDEBUG popup session and automatically popup again
  1928.             if the InDOS flag is zero
  1929.         03h not used (same as 00h)
  1930.         04h not used (same as 00h)
  1931.         05h put new command line into the input buffer,
  1932.             DS:SI -> new command line (ASCIZ string, max 66 chars)
  1933.         06h process new command line
  1934.             DS:SI -> new command line (ASCIZ string, max 66 chars)
  1935.            else unknown status, but continue processing commmand line
  1936. Note:    this function must end with a far call to the old INT 2F handler (with
  1937.       registers unchanged) if the driver does not support the interpreter
  1938.       command in BX.  Otherwise, the driver must not chain to the old
  1939.       INT 2F.
  1940.  
  1941. Format of MDEBUG data structure:
  1942. Offset    Size    Description
  1943.  00h    WORD    register SE
  1944.  02h    WORD    register OF
  1945.  04h    WORD    register FS
  1946.  06h    WORD    register FO
  1947.  08h    WORD    register AX
  1948.  0Ah    WORD    register BX
  1949.  0Ch    WORD    register CX
  1950.  0Eh    WORD    register DX
  1951.  10h    WORD    register SI
  1952.  12h    WORD    register DI
  1953.  14h    WORD    register DS
  1954.  16h    WORD    register ES
  1955.  18h    WORD    register BP
  1956.  1Ah    WORD    register SS
  1957.  1Ch    WORD    register SP
  1958.  1Eh    WORD    register FL (flags)
  1959.  20h    WORD    register R0
  1960.  22h    WORD    register R1
  1961.  24h    WORD    register R2
  1962.  26h    WORD    register R3
  1963.  28h    WORD    register R4
  1964.  2Ah    WORD    register R5
  1965.  2Ch    WORD    register R6
  1966.  2Eh    WORD    register R7
  1967.  30h    WORD    register R8
  1968.  32h    WORD    register CS, return-address
  1969.  34h    WORD    register IP, return-address
  1970.  36h    DWORD    saved pointer to data for key <F6> (v1.60)
  1971.         saved monitor address (v1.70)
  1972.  3Ah 12 WORDs    saved register values on last popup entry (for <F8> key)
  1973.         (original register values at popup entry of MDEBUG)
  1974.         AX, BX, CX, DX, SI, DI, DS, ES, BP, SS, SP, flags
  1975.  52h 12 WORDs    saved register values on last popup exit (for <SHIFT-F8> key)
  1976.         AX, BX, CX, DX, SI, DI, DS, ES, BP, SS, SP, flags
  1977.  6Ah    DWORD    address of the DOS-invars-table
  1978.  6Eh    DWORD    address of the InDOS flag
  1979.  72h    WORD    offset of the register which is used for the segment of the
  1980.         first monitor window
  1981.  74h    WORD    offset of the register which is used for the offset of the
  1982.         first monitor window
  1983.  76h    WORD    name of the register which is used for the segment of the
  1984.         first monitor segment
  1985.  78h    WORD    name of the register which is used for the offset of the first
  1986.         monitor window     
  1987.  7Ah    WORD    pseudo register 1
  1988.  7Ch    WORD    pseudo register 2
  1989. --------G-2FD103-----------------------------
  1990. INT 2F - MDEBUG command driver - EXECUTE KEY IN THE MONITOR
  1991.     AX = D103h
  1992.     BX = key code (like result of an interrupt 16h call)
  1993.     CX = 0 -> the cursor is in the ASCII column of the monitor
  1994.     CX = 1 -> the cursor is in one of the hex fields of the monitor
  1995.     DS:SI -> MDEBUG data structure (see AX=D102h)
  1996.     ES:DI -> actual byte in the monitor
  1997. Return: AL = FFh
  1998.     AH = return code
  1999.         00h key processed, read next key
  2000.         01h leave MDEBUG popup session
  2001.         02h leave MDEBUG popup session and automatically popup again if DOS
  2002.         is not busy
  2003.         03h signal an error (beep)
  2004.         04h driver has redefined the key, proceed with the new key
  2005.         BX = new key code
  2006.         MDEBUG will not pass the new key to the command driver(s)
  2007.        else treat like code 00h
  2008. Note:    this function must end with a far call to the old INT 2F handler (with
  2009.       registers unchanged) if the driver does not support the key in BX.
  2010.       Otherwise, the driver must not chain to the old INT 2F.
  2011. SeeAlso: AX=D104h
  2012. --------G-2FD104-----------------------------
  2013. INT 2F - MDEBUG command driver - EXECUTE KEY IN THE INTERPRETER
  2014.     AX = D104h
  2015.     DS:SI -> MDEBUG data structure (see AX=D102h)
  2016. Return: AL = FFh
  2017.     AH = return code
  2018.         00h key processed, read next key
  2019.         01h leave MDEBUG popup session
  2020.         02h leave MDEBUG popup session and automactically popup again if
  2021.         DOS is not busy
  2022.         03h signal an error (beep)
  2023.         04h driver has redefined the key, proceed with the new key
  2024.         BX = new key code
  2025.         MDEBUG won't pass the new key to the command driver(s)
  2026.         05h put new command line into the input buffer
  2027.         DS:SI -> new command line (ASCIZ string, max 66 chars)
  2028.         06h process new command line
  2029.         DS:SI -> new command line (ASCIZ string, max 66 chars)
  2030.        else treat like code 00h
  2031. Note:    this function must end with a far call to the old INT 2F handler if the
  2032.       driver does not support the key in BX.  Otherwise, the driver must
  2033.       not chain to the old INT 2F.
  2034. SeeAlso: AX=D103h
  2035. --------G-2FD1-------------------------------
  2036. INT 2F - MDEBUG command driver - RESERVED FUNCTIONS
  2037.     AH = D1h
  2038.     AL = 05h-0Ah
  2039. Note:    these functions are reserved for future use
  2040. --------G-2FD110-----------------------------
  2041. INT 2F - MDEBUG command driver - GET ADDRESS OF THE OLD INT 2F
  2042.     AX = D110h
  2043. Return: DL = FFh
  2044.     ES:BX -> next program in the chain for INT 2F
  2045.     CX = code segment of this driver
  2046.     DI = offset of driver identification table (see below) (v1.60+)
  2047. Notes:    only called by the transient part of the driver
  2048.     must be reentrant and the driver must not chain this function to the
  2049.       old INT 2F
  2050.  
  2051. Format of the driver identification table:
  2052. Offset    Size    Description
  2053.  00h  26 BYTEs     signature "Kommandotreiber für MDEBUG"
  2054.                          ^- Note: ASCII 129,German U-umlaut
  2055.  27h  12 BYTEs     name of driver, e.g. "MDHISDRV.COM"
  2056.          each driver must have a unique name
  2057. --------G-2FD111-----------------------------
  2058. INT 2F - MDEBUG command driver - START DRIVER
  2059.     AX = D111h
  2060. Return: DL = FFh
  2061. Notes:    only called by the transient part of the driver to inform the resident
  2062.       part that it is installed
  2063.     the function must be reentrant and the driver mustn't chain this
  2064.       function to the old INT 2F
  2065. SeeAlso: AX=D101h,AX=D112h
  2066. --------G-2FD112-----------------------------
  2067. INT 2F - MDEBUG command driver - END DRIVER
  2068.     AX = D112h
  2069. Return: DL = FFh
  2070. Notes:    only called by the transient part of the driver to inform the resident
  2071.       part that it will be released after this function
  2072.     the function must be reentrant and the driver mustn't chain this
  2073.       function to the old INT 2F
  2074. SeeAlso: AX=D101h,AX=D111h
  2075. --------G-2FD1-------------------------------
  2076. INT 2F - MDEBUG command driver - RESERVED FUNCTIONS
  2077.     AH = D1h
  2078.     AL = 13h-7Fh
  2079. Note:    these functions are reserved for future use
  2080. --------G-2FD1-------------------------------
  2081. INT 2F - MDEBUG command driver - USER DEFINED FUNCTIONS
  2082.     AH = D1h
  2083.     AL = 80h-FFh
  2084. Note:    these functions are reserved for user defined features (e.g.
  2085.       communication between the transient und resident parts of the    driver)
  2086. ----------2FD200-----------------------------
  2087. INT 2F - PCL-838.EXE - INSTALLATION CHECK
  2088.     AX = D200h
  2089. Return: AL = FFh if installed??? (documented as AX = return value)
  2090. Program: PCL-838 is a resident utility for controlling a stepmotor adapter
  2091.       board by Advantec 
  2092. SeeAlso: AX=D201h"PCL-838",AX=D202h"PCL-838"
  2093. --------Q-2FD200BX5144-----------------------
  2094. INT 2F U - Quarterdeck - QEMM/QRAM/VIDRAM/MANIFEST v5.0+ - INSTALLATION CHECK
  2095.     AX = D200h
  2096.     BX = 5144h ("QD")
  2097.     CX = 4D45h ("ME")
  2098.     DX = 4D30h ("M0")
  2099. Return: AL = FFh installed      
  2100.     if BX,CX,DX registers were as specified on entry:
  2101.         BX = 4D45h ("ME")
  2102.         CX = 4D44h ("MD")
  2103.         DX = 5652h ("VR")
  2104. Notes:    Quarterdeck programs (QEMM/QRAM/VIDRAM/MANIFEST/etc) will search for a
  2105.       free AH value from D2h through FFh, then C0h through D1h
  2106.     for AL <> 0, if the BX/CX/DX values don't match a the identifier of a
  2107.       Quarterdeck product, it just chains to the previous INT 2F handler
  2108. SeeAlso: AX=D201h/BX=4849h,AX=D201h/BX=4D41h,AX=D201h/BX=4D45h
  2109. SeeAlso: AX=D201h/BX=5145h,AX=D201h/BX=5649h
  2110. ----------2FD201-----------------------------
  2111. INT 2F - PCL-838.EXE - UNINSTALL
  2112.     AX = D201h
  2113. Return: AX = return value
  2114. SeeAlso: AX=D200h"PCL-838",AX=D202h"PCL-838"
  2115. --------m-2FD201BX4849-----------------------
  2116. INT 2F U - Quarterdeck - GET QD HIMEM PRESENCE
  2117.     AX = D201h
  2118.     BX = 4849h ("HI")
  2119.     CX = 4D45h ("ME")
  2120.     DX = 4D51h ("MQ")
  2121. Return: BX = 4F4Bh ("OK")
  2122.     ES:DI -> HIMEM entry point
  2123. Notes:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  2124.       through FFh, then C0h through D1h
  2125. SeeAlso: AX=D200h,AX=D201h/BX=5145h
  2126. --------m-2FD201BX4849-----------------------
  2127. INT 2F U - Quarterdeck - QEMM/QRAM v5.0+ - GET HIRAM MEMORY CHAIN
  2128.     AX = D201h
  2129.     BX = 4849h ("HI")
  2130.     CX = 5241h ("RA")
  2131.     DX = 4D30h ("M0")
  2132. Return: BX = 4F4Bh ("OK")
  2133.     CX = segment of start of HIRAM chain
  2134.     DX = QEMM/QRAM code segment
  2135. Notes:    Quarterdeck programs (QEMM/QRAM/VIDRAM/MANIFEST/etc) will search for a
  2136.       free AH value from D2h through FFh, then C0h through D1h
  2137.     QEMM and QRAM both responded the same
  2138.     the HIRAM memory chain has the same format as the regular DOS 4.0
  2139.       memory chain (see INT 21/AH=52h), except that XMS Upper Memory Blocks
  2140.       have the block header program name field set to "UMB"; blocks whose
  2141.       "owner" field is set to the QEMM/QRAM code segment returned in DX
  2142.       are locked out regions such as video memory and ROMs.
  2143. SeeAlso: AX=D200h
  2144. --------G-2FD201BX4D41-----------------------
  2145. INT 2F U - Quarterdeck - MANIFEST v1.0+ - INSTALLATION CHECK
  2146.     AX = D201h
  2147.     BX = 4D41h ("MA")
  2148.     CX = 4E49h ("NI")
  2149.     DX = 4645h ("FE")
  2150. Return: BX = 5354h ("ST")
  2151. Note:    Quarterdeck programs (QEMM/QRAM/VIDRAM/MANIFEST/etc) will search for a
  2152.       free AH value from D2h through FFh, then C0h through D1h
  2153. SeeAlso: AX=D200h
  2154. --------E-2FD201BX4D45-----------------------
  2155. INT 2F U - Quarterdeck - DVDOS4GX.DVR - ???
  2156.     AX = D201h
  2157.     BX = 4D45h ("ME")
  2158.     CX = 5155h ("QU")
  2159.     DX = 5044h ("PD")
  2160. Return: AL = FFh
  2161.     BX = 4F4Bh ("OK")
  2162. Notes:    AH=D2h is the default; use the Quarterdeck installation check described
  2163.       under AX=D200h
  2164.     called by QEMM 6.03
  2165.     performs a variety of actions before setting return registers
  2166. SeeAlso: AX=D200h
  2167. --------m-2FD201BX5145-----------------------
  2168. INT 2F U - Quarterdeck - QEMM v5.0+ - INSTALLATION CHECK
  2169.     AX = D201h
  2170.     BX = 5145h ("QE")
  2171.     CX = 4D4Dh ("MM")
  2172.     DX = 3432h ("42")
  2173. Return: BX = 4F4Bh ("OK")
  2174.     ES:DI -> QEMM API entry point (see INT 67/AH=3Fh)
  2175. Notes:    Quarterdeck programs (QEMM/QRAM/VIDRAM/MANIFEST/etc) will search for a
  2176.       free AH value from D2h through FFh, then C0h through D1h
  2177.     this call is not available under QEMM v6.00 unless Windows3 support
  2178.       has been disabled with the NW3 switch to QEMM386.SYS
  2179. SeeAlso: AX=D200h,AX=D201h/BX=4849h,INT 67/AH=3Fh
  2180. --------V-2FD201BX5649-----------------------
  2181. INT 2F U - Quarterdeck - VIDRAM v5.0+ - INSTALLATION CHECK
  2182.     AX = D201h
  2183.     BX = 5649h ("VI")
  2184.     CX = 4452h ("DR")
  2185.     DX = 414dh ("AM")
  2186. Return: BX = 4F4Bh ("OK")
  2187.     ES:DI -> VIDRAM entry point
  2188. Note:    Quarterdeck programs (QEMM/QRAM/VIDRAM/MANIFEST/etc) will search for a
  2189.       free AH value from D2h through FFh, then C0h through D1h
  2190. SeeAlso: AX=D200h
  2191.  
  2192. Call VIDRAM entry point with:
  2193.     AH = 00h get status
  2194.         Return: AL = VIDRAM state (see below)
  2195.             BL = extra RAM status
  2196.                 00h VIDRAM does not use extra RAM
  2197.                 01h VIDRAM uses EMS as extra RAM
  2198.                 02h VIDRAM uses EGA as extra RAM
  2199.             BH = feature flags
  2200.                 bit 0: override enabled
  2201.                 bit 1: mapped memory detected in A000h-B000h range
  2202.                 bit 2: top of memory not at 640K
  2203.                 bit 3: MDA detected
  2204.                 bit 4: high RAM exists in video area
  2205.                 bit 5: mapped memory detected in video area
  2206.                 bits 6-7: reserved???
  2207.             CL = current monitor (01h = mono, 80h = color)
  2208.             SI = current top of memory (paragraph)
  2209.             DI = segment of start of HiRAM chain
  2210.     AH = 01h setup
  2211.         AL = VIDRAM state (00h off, 01h no EGA graphics, 02h no graph)
  2212.         BL = extra RAM status (see above)
  2213.         BH = feature flags (see above)
  2214.         CL = monitor (01h = monochrome, 80h = color)
  2215.         SI = new top of memory (paragraph)
  2216.         DI = segment of start of HiRAM chain
  2217.     AH = 02h get end address of VIDRAM code
  2218.         Return: ES:DI -> VIDRAM partial map context (see below)
  2219. Return: CF set on error
  2220.     CF clear if successful
  2221.  
  2222. Format of partial map context (EMS 3.2):
  2223. Offset    Size    Description
  2224.  00h    BYTE    EMS version ID (32h)
  2225.  01h    WORD    EMM handle for this entry
  2226.  03h    BYTE    number of frames
  2227.  04h    BYTE    first page frame
  2228.  05h    WORD    offset from ES to previously saved map
  2229.  
  2230. Format of partial map context (EMS 4.0):
  2231. Offset    Size    Description
  2232.  00h    BYTE    EMS version ID (40h)
  2233.  01h    WORD    mappable segment count
  2234.  03h  N WORD    mappable segments
  2235.     WORD    offset to previously saved map???
  2236. ----------2FD202-----------------------------
  2237. INT 2F - PCL-838.EXE - EXECUTE PCL838 COMMANDS
  2238.     AX = D202h
  2239.     CX:BX -> parameter table
  2240. Return: AX = return value
  2241. SeeAlso: AX=D200h"PCL-838",AX=D201h"PCL-838"
  2242. --------R-2FD300BX4562-----------------------
  2243. INT 2F U - TeleReplica - INSTALLATION CHECK
  2244.     AX = D300h
  2245.     BX = 4562h
  2246.     CX = 2745h
  2247.     DX = serial port I/O base address??? (03F8h for v3.9)
  2248. Return: SI = segment of resident code
  2249.     AX = 251Dh
  2250.     BX = DF21h
  2251.     CX = F321h
  2252.     DX = ???
  2253. --------R-2FD3CB-----------------------------
  2254. INT 2F U - LapLink Quick Connect v6 - API
  2255.     AX = D3CBh
  2256.     CX = function
  2257.         0002h get ???
  2258.         Return: BX:AX -> ???
  2259.             CL = ???
  2260.             CH = ???
  2261.             DX = ???
  2262.             DI = COM1 I/O port???
  2263.             SI = COM2 I/O port???
  2264.         0003h initialization???
  2265.         0004h ???
  2266.         0005h initialization???
  2267.         0006h reset/clear ???
  2268.         Return: AX = 0000h
  2269.             ES:DI -> next byte after ??? cleared by this call
  2270.         0007h initialization???
  2271.         0008h uninstall
  2272.         Return: BX = status
  2273.                 0000h successful
  2274.                 FFFFh incomplete, stub remains in memory
  2275. Return: CX = 534Bh (except function 0002h)
  2276. Index:    uninstall;LapLink Quick Connect
  2277. --------l-2FD44D-----------------------------
  2278. INT 2F - 4DOS.COM v2.1+ - API
  2279.     AX = D44Dh
  2280.     BH = function
  2281.         00h installation check
  2282.         Return: AX = 44DDh
  2283.             BL = minor version number
  2284.             BH = major version number
  2285.             CX = PSP segment address for current invocation
  2286.             DL = 4DOS shell number (0 for the first (root) shell,
  2287.                  updated each time a new copy is loaded)
  2288.         01h (internal, v2.1-3.03) terminate current copy of 4DOS
  2289.         Return: nothing
  2290.         (internal, v4.0) ???
  2291.         Return: ES:BX -> data area (see below)
  2292.         02h ???
  2293.         DX = ???
  2294.     ---v2.1-3.03 only---
  2295.         03h EXEC program
  2296.         CX:DX -> EXEC record
  2297.         FEh deallocate shell number (passed through to root shell)
  2298.         ???
  2299.         FFh allocate shell number (passed through to root shell)
  2300. Note:    bug in v3.00 will crash system if unrecognized value in BH
  2301. SeeAlso: AX=D44Eh,AX=E44Dh,INT 21/AX=4403h
  2302. Index:    installation check;4DOS|installation check;NDOS
  2303.  
  2304. Format of EXEC record:
  2305. Offset    Size    Description
  2306.  00h    WORD    offset of ASCIZ program name in same segment as EXEC record
  2307.  02h    WORD    offset of DOS commandline in same segment as EXEC record
  2308.  04h    WORD    segment of environment for child process (see INT 21/AH=26h)
  2309.  
  2310. Format of 4DOS v4.0 data area:
  2311. Offset    Size    Description
  2312.  00h  2 BYTEs    ???
  2313.  06h    WORD    XMS handle for swapping
  2314.     ???
  2315. --------l-2FD44E-----------------------------
  2316. INT 2F - 4DOS v3.0+ - AWAITING USER INPUT
  2317.     AX = D44Eh
  2318. ---4DOS v3.01+---
  2319.     BX = 0000h 4DOS is ready to display prompt
  2320.        = 0001h 4DOS has displayed the prompt, about to accept user input
  2321. Return: handler must preserve SI, DI, BP, SP, DS, ES, and SS
  2322. Note:    v3.00 only makes the call corresponding to BX=0001h, does not set BX
  2323. SeeAlso: AX=D44Dh
  2324. --------K-2FD44FBX0000-----------------------
  2325. INT 2F - 4DOS v4.0+ - KSTACK.COM - INSTALLATION CHECK
  2326.     AX = D44Fh
  2327.     BX = 0000h
  2328. Return: AX = 44DDh if installed
  2329. SeeAlso: AX=D44Fh/BX=0001h
  2330. --------K-2FD44FBX0001-----------------------
  2331. INT 2F - 4DOS v4.0+ - KSTACK.COM - PLACE KEYSTROKES INTO KEYSTACK
  2332.     AX = D44Fh
  2333.     BX = 0001h
  2334.     CX = number of keystrokes (01h-FFh)
  2335.     DS:DX -> keystroke list (one word per keystroke)
  2336. Return: AX = status
  2337.         0000h successful
  2338.         nonzero failed
  2339.     BX,CX,DX destroyed
  2340. Notes:    the keystrokes are the exact values to return from subsequent calls to
  2341.       INT 16 with AH=00h,01h,10h, or 11h, with the following exceptions:
  2342.         0000h causes subfunctions 01h and 11h to indicate an empty
  2343.             keyboard buffer
  2344.         FFFFh is followed by a word indicating the number of clock
  2345.             ticks to delay before the next faked keystroke
  2346.     v4.00 KSTACK overwrites any unread keystrokes from the previous
  2347.       invocation, and does not range-check CX; it will overwrite memory
  2348.       following the resident portion if CX is greater than 100h.
  2349. SeeAlso: AX=D44Fh/BX=0000h,INT 16/AH=00h,INT 21/AX=4403h
  2350. --------G-2FD600-----------------------------
  2351. INT 2F - HEART.COM - INSTALLATION CHECK
  2352.     AX = D600h
  2353. Return: AX = 0303h (two hearts) if installed
  2354.         ES:DI -> buffer (see below)
  2355. Program: HEART.COM is a CPU lock-up/critical indicator utility by Mitch Davis.
  2356. Notes:    Once the host program has identified the address of the data area, it
  2357.       can change this to indicate safe/critical, alternate colours, etc.
  2358.     The entries for the color table are in char/attrib form.  Every two
  2359.       entries form a pair which is alternated between 68 times a minute.
  2360.       The first half of the table is for color videos, the second mono.
  2361.       Within each half, the first half is for the safe chars, and the
  2362.       second for the critical chars.
  2363.  
  2364. Format of buffer:
  2365. Offset    Size    Description
  2366.  00h  8 WORDs    table of colors/attributes (see notes above)
  2367.  10h    BYTE    flags
  2368.         bit 0: program is in critical section, so flash double
  2369.             exclamation mark
  2370.         bit 1: program is in safe code, so flash the heart character
  2371.  11h    WORD    position of heartbeat on screen, normally 009Eh (last column
  2372.         of second line)
  2373. ----------2FD600-----------------------------
  2374. INT 2F U - VEDIT VSWAP - INSTALLATION CHECK
  2375.     AX = D600h
  2376. Return: AL = D6h if installed
  2377. Program: VSWAP is the resident portion of VEDIT's "swapper" capability; VEDIT
  2378.       is a programmer's text editor by Greenview Data.
  2379. SeeAlso: AX=D601h,AX=D602h
  2380. ----------2FD601-----------------------------
  2381. INT 2F U - VEDIT VSWAP - ???
  2382.     AX = D601h
  2383.     BL = subfunction number???
  2384. Return: BL = return code ???
  2385.     ES = resident portion's data??? segment
  2386.     DX = resident portion's code segment
  2387. SeeAlso: AX=D600h"VSWAP"
  2388. ----------2FD602-----------------------------
  2389. INT 2F U - VEDIT VSWAP - EXEC PROGRAM WITH SWAP
  2390.     AX = D602h
  2391.     other registers set as for INT 21/AX=4B00h
  2392. Return: CF set on error
  2393.         AL = error code
  2394.         82h = failure due to ???
  2395.     CF clear on success
  2396. SeeAlso: AX=D600h"VSWAP",INT 21/AH=4Bh"EXEC"
  2397. --------N-2FD701BX0000-----------------------
  2398. INT 2F - BANYAN VINES v4+ - GET BANV INTERRUPT NUMBER
  2399.     AX = D701h
  2400.     BX = 0000h
  2401. Return: AX = 0000h installed
  2402.         BX = interrupt number (60h to 66h)
  2403.        nonzero not present
  2404. Note:    if AX is nonzero, VINES 3.x or earlier may be installed, thus it is
  2405.       necessary to examine the four bytes preceding the handlers for
  2406.       INT 60 through INT 66 for the string "BANV"
  2407. SeeAlso: AX=D702h,AX=D703h,AX=D704h
  2408. --------N-2FD702-----------------------------
  2409. INT 2F U - BANYAN VINES v4+ - PCPRINT interface
  2410.     AX = D702h
  2411.     BX = function
  2412.     ???
  2413. Return: ???
  2414. SeeAlso: AX=D701h,AX=D703h,INT 61/AX=0005h"Banyan"
  2415. --------N-2FD703-----------------------------
  2416. INT 2F U - BANYAN VINES v4+ - MAIL interface
  2417.     AX = D703h
  2418.     BX = function
  2419.     ???
  2420. Return: ???
  2421. SeeAlso: AX=D702h,AX=D704h
  2422. --------N-2FD704-----------------------------
  2423. INT 2F U - BANYAN VINES v4+ - Streettalk Directory Assistance interface
  2424.     AX = D704h
  2425.     BX = function
  2426.     ???
  2427. Return: ???
  2428. SeeAlso: AX=D703h,INT 61/AX=0007h"Banyan"
  2429. --------N-2FD800-----------------------------
  2430. INT 2F - Novell NetWare Lite - CLIENT.EXE - INSTALLATION CHECK
  2431.     AX = D800h
  2432. Return:    AL = FFh if installed
  2433.         DX = version number??? (0100h in 1.00)
  2434.         BX = data segment of resident copy???
  2435.         ES:DI = FAR entry point for API routines
  2436.             Load BX = function number and call for various
  2437.             functions.    Functions 00h - 10h supported in 1.00.
  2438. SeeAlso: AX=7A00h,AX=D880h
  2439. --------N-2FD880-----------------------------
  2440. INT 2F - Novell NetWare Lite - SERVER.EXE - INSTALLATION CHECK
  2441.     AX = D880h
  2442. Return:    AL = FFh if installed
  2443.         DX = version number??? (0100h in 1.00)
  2444.         BX = Data segment of resident copy???
  2445.         CL = 01h if SERVER is active
  2446.            = 00h if SERVER is disabled
  2447. SeeAlso: AX=7A00h,AX=D800h
  2448. --------F-2FDA00-----------------------------
  2449. INT 2F - ZyXEL ZFAX - INSTALLATION CHECK
  2450.     AX = DA00h
  2451. Return: AH = enabled state (00h = enabled, 01h = disabled)
  2452.     AL = 5Ah installed
  2453. Note:    ZFAX is the bundled FAX software which comes with the ZyXEL model
  2454.       fax modems.
  2455. SeeAlso: AX=CBDCh,AX=DA01h,AX=DA02h,AX=DA03h
  2456. --------F-2FDA01-----------------------------
  2457. INT 2F - ZyXEL ZFAX - UNINSTALL
  2458.     AX = DA01h
  2459. Return: AL = 00h Success
  2460.          01h Failure
  2461. SeeAlso: AX=DA00h
  2462. --------F-2FDA02-----------------------------
  2463. INT 2F - ZyXEL ZFAX - DISABLE
  2464.     AX = DA02h
  2465. Return: AL = 00h
  2466. SeeAlso: AX=DA03h
  2467. --------F-2FDA03-----------------------------
  2468. INT 2F - ZyXEL ZFAX - ENABLE
  2469.     AX = DA03h
  2470. Return: AL = 00h
  2471. SeeAlso: AX=DA02h
  2472. --------G-2FDA55-----------------------------
  2473. INT 2F U - TRAP.COM - INSTALLATION CHECK
  2474.     AX = DA55h
  2475.     DL = interrupt number
  2476.     DH = ???
  2477. Return: if installed
  2478.         AH = interrupt number
  2479.         AL = ???
  2480.         ES:BX -> ???
  2481. Program: TRAP is an interrupt call tracer by Patrick Phillipot/Udo Chrosziel
  2482. Note:    a separate copy of TRAP is loaded for each interrupt to be traced; thus
  2483.       the interrupt number is part of the installation check
  2484. --------K-2FDC00-----------------------------
  2485. INT 2F - GOLD.COM - INSTALLATION CHECK
  2486.     AX = DC00h
  2487. Return: AL = 00h not installed
  2488.        = FFh installed
  2489. Program: GOLD is a TSR by Bob Eager which makes the NumLock key return the code
  2490.       for F1; the purpose is to improve Kermit's VTxxx emulation
  2491. --------K-2FDC01-----------------------------
  2492. INT 2F - GOLD.COM - GET STATE
  2493.     AX = DC01h
  2494. Return:    AL = status
  2495.         00h off
  2496.         01h on
  2497. SeeAlso: AX=DC00h,AX=DC02h
  2498. --------K-2FDC02-----------------------------
  2499. INT 2F - GOLD.COM - SET STATE
  2500.     AX = DC02h
  2501.     DL = new state
  2502.         00h off
  2503.         01h on
  2504. Return: AL = 00h (OK)
  2505. SeeAlso: AX=DC01h
  2506. --------t-2FDD-------------------------------
  2507. INT 2F - SoftCom programs - API
  2508.     AH = DDh
  2509.     AL = FEh get info
  2510.         Return: ES:BX -> TSR info list (see below)
  2511.     AL = program identifier
  2512.         BH = function
  2513.         FDh get version
  2514.             Return: BX = version
  2515.         FFh installation check
  2516.             Return: AL = FFh if installed
  2517.                 BX = version
  2518.                 ES = segment of resident code
  2519.         others vary by program
  2520. Return: AL = status
  2521.         bit 7 set on error
  2522.         AL = 81h unknown function
  2523. Index:    installation check;SoftCom programs
  2524.  
  2525. Format of TSR info list:
  2526. Offset    Size    Description
  2527.  00h  9 BYTEs    blank-padded ASCIZ program name
  2528.  09h    BYTE    program ID
  2529.  0Ah    WORD    program's PSP segment
  2530.  0Ch    WORD    program version (major in high byte)
  2531.  0Eh    DWORD    pointer to next item in info list or 0000h:0000h
  2532.  12h    BYTE    number of interrupts hooked
  2533.  13h  5 BYTEs    interrupt numbers hooked by program
  2534.  18h  8 BYTEs    reserved
  2535. --------d-2FDD--BX7844-----------------------
  2536. INT 2F - xDISK v3.32+ - INSTALLATION CHECK
  2537.     AH = DDh
  2538.     BX = 7844h ('xD')
  2539.     CX = 4953h ('IS')
  2540.     DX = 4B3Fh ('K?')
  2541.     AL = desired drive (01h-1Ah) or 00h to check for xDISK on any drive
  2542.     ES:DI -> 25-byte data buffer (see below)
  2543. Return: AX = DDFFh if installed (on specified drive if AL nonzero on entry)
  2544.        BX = 87BBh
  2545.        DX = B4C0h
  2546.        ES:DI buffer filled
  2547.     CX,CF destroyed
  2548. SeeAlso: INT 21/AX=4404h"xDISK",INT 21/AX=4405h"xDISK"
  2549.  
  2550. Format of data buffer:
  2551. Offset    Size    Description
  2552.  00h    DWORD    pointer to ASCIZ driver signature "xDISK unit: X"
  2553.  04h    BYTE    flag: 01h if disk linked to DOS, 00h if unlinked
  2554.  05h    BYTE    flag: 01h if write protected, 00h if not
  2555.  06h    BYTE    flag: 01h if root directory full, 00h if not
  2556.  07h    BYTE    flag: 01h if free space uncompacted, 00h if compacted
  2557.  08h    BYTE    resizing state: 00h not resizable, 01h resized, 80h resizable
  2558.  09h    BYTE    flag: 01h inelastic resizable disk, 00h elastic
  2559.  0Ah  2 BYTEs    reserved
  2560.  0Ch    BYTE    flag: 01h collapsed disk, 00h not collapsed
  2561.  0Dh    BYTE    flag: 01h using all EMS, 00h some EMS free
  2562.  0Eh    BYTE    flag: 01h password enabled, 00h disabled
  2563.  0Fh    BYTE    flag: 01h password audio feedback, 00h no feedback
  2564.  10h    BYTE    flag: 01h password video feedback, 00h no feedback
  2565.  11h    BYTE    flag: 01h confirm changes, 00h no confirmation
  2566.  12h    BYTE    flag: 01h terse display, 00h verbose display
  2567.  13h    BYTE    flag: 01h click speaker on disk access, 00h no click
  2568.  14h    BYTE    flag: 01h flash icon on disk access, 00h no icon flash
  2569.  15h    BYTE    FAT entry size: 00h 12-bit, FFh 16-bit
  2570.  16h    WORD    count of open files in RAM disk
  2571.  18h    BYTE    unused    
  2572. --------Q-2FDE00BX4445-----------------------
  2573. INT 2F - DESQview v2.26+ External Device Interface - INSTALLATION CHECK
  2574.     AX = DE00h
  2575.     BX = 4445h ("DE")
  2576.     CX = 5844h ("XD")
  2577.     DX = 4931h ("I1")
  2578. Return: AL = FFh if installed (even if other registers do not match)
  2579.     if BX,CX, and DX were as specified on entry,
  2580.         BX = 4845h ("HE")
  2581.         CX = 5245h ("RE")
  2582.         DX = 4456h ("DV")
  2583. Notes:    AH=DEh is the default XDI multiplex number, but may range from C0h-FFh
  2584.     programs should check for XDI starting at DEh to FFh, then C0h to DDh
  2585.     the XDI handler should not issue any DOS or BIOS calls, nor should it
  2586.       issue DESQview API calls other than those allowed from hardware ints
  2587. SeeAlso: AX=DE02h,INT 15/AX=5400h
  2588. --------Q-2FDE01-----------------------------
  2589. INT 2F - DESQview v2.26+ External Device Interface - DRIVER CUSTOM SUBFUNCTION
  2590.     AX = DE01h
  2591.     BX = driver ID
  2592.     other registers as needed by driver
  2593. Notes:    XDI drivers should pass this call through to previous handler if ID
  2594.       does not match
  2595.     DESQview never calls this function
  2596. --------Q-2FDE01BX4450-----------------------
  2597. INT 2F U - Quarterdeck QDPMI.SYS v1.0 - INSTALLATION CHECK
  2598.     AX = DE01h
  2599.     BX = 4450h ("DP")
  2600.     CX = 4D49h ("MI")
  2601.     DX = 3039h ("09")
  2602. Return: AL = FFh if installed
  2603.         BX = 4D42h ("MB")
  2604.         CX = 4921h ("I!")
  2605.         DX = 8F4Fh
  2606.         ES:DI -> filename of DPMI host overlay
  2607. Note:    the installation check consists of testing for the existence of the
  2608.       character device QDPMI$$$
  2609. SeeAlso: INT 2F/AX=1687h,INT 31/AX=0000h
  2610. Index:    installation check;QDPMI
  2611. --------U-2FDE01BX5242-----------------------
  2612. INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, Ralf Brown's XDI drivers
  2613.     AX = DE01h
  2614.     BX = 5242h ("RB")
  2615.     CX:DX = program identifier
  2616.         656F7000h ("eop",0) for DVeop
  2617. Return: AX = 5242h ("RB") if installed
  2618.         ES:BX -> data or entry point
  2619.         CX = version number (CH = major, CL = minor)
  2620.  
  2621. Call DVeop entry point with:
  2622.     ES:DI -> callback address or 0000h:0000h to remove callback
  2623. Return: AX = status
  2624.         0000h failed (callback table full or attempted to remove non-
  2625.             existent callback)
  2626.         0001h successful
  2627.         ES:DI -> chaining address
  2628.     BX,CX,DX destroyed
  2629. Notes:    the callback function is called with a simulated interrupt when the
  2630.       DESQview window containing it is closed; it should perform all
  2631.       necessary cleanup and then perform a FAR jump to the chaining address
  2632.       or an IRET if the chaining address is 0000h:0000h
  2633.     if the program wishes to remove itself before the window is closed, it
  2634.       should call the DVeop entry point with the previously returned
  2635.       chaining address and ignore the returned chaining address.
  2636. --------U-2FDE01BX7474-----------------------
  2637. INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, DVTXDI.COM
  2638.     AX = DE01h
  2639.     BX = 7474h
  2640.     CL = function
  2641.         00h installation check
  2642.         Return: AL = FFh
  2643.         01h get process handle
  2644.         DX = keys on Open Window menu (DL = first, DH = second)
  2645.         Return: AX = process handle or 0000h if not running
  2646.         02h (v1.3+) set TMAN handle
  2647.         DX = TMAN process handle
  2648.         03h (v1.3+) set open keys to ignore on next CL=01h call
  2649.         DX = keys on Open Window menu (DL = first, DH = second)
  2650. Return: BX = 4F4Bh ("OK")
  2651.     DL destroyed
  2652. Note:    DVTXDI is distributed as part of the shareware products DVTree (DOS
  2653.      shell/DESQview process manager) and DVTMAN by Mike Weaver
  2654. Index:    installation check;DVTXDI
  2655. --------U-2FDE01BX7575-----------------------
  2656. INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, DVSIXDI.COM
  2657.     AX = DE01h
  2658.     BX = 7575h
  2659.     CX = function
  2660.         0000h installation check
  2661.         Return: AX = 00FFh if installed
  2662.         0001h turn on notification (currently unused)
  2663.         Return: AX = 0001h
  2664.         0002h turn off notification (currently unused)
  2665.         Return: AX = 0001h
  2666.         0003h get process information
  2667.         Return: AX = status
  2668.                 0000h failed
  2669.                 0001h successful
  2670.                 BX = last instantaneous time slice
  2671.                     in 1/100s (v1.10)
  2672.                     in 1/18s (v1.11+)
  2673.                 CX = number of processes
  2674.                 DX = number of "(starting)" records (v2.00+)
  2675.                 SI = number of records in process info array
  2676.                      (v2.00+) (always 15 for v1.x)
  2677.                 ES:DI -> process info array (see below)
  2678.         0004h get version
  2679.         Return: AH = major version
  2680.             AL = minor version
  2681.         0005h (v1.10+) get time since DESQview started
  2682.         Return: DX:AX = 1/100s since DV start (v1.10)
  2683.             DX:AX = 1/18s since DV start (v1.11+)
  2684.         0006h (v1.10+) get number of task switches
  2685.         Return: DX:AX = total task switches
  2686.             CX = task switches in last instantaneous interval
  2687. Notes:    DVSIXDI is part of the DVSI (DESQview System Information) package by
  2688.       Daniel J. Bodoh
  2689.     for v1.00, function 0003h allocates common memory, which the caller
  2690.       must deallocate after reading the process information; only the
  2691.       currently used records are placed in the buffer
  2692.     for v1.10+, function 0003h merely returns a pointer to the internal
  2693.       array of process information; the caller should make a copy of the
  2694.       array while inside a critical section (see INT 15/AX=101Bh).    Only
  2695.       those records with bit 7 of the first byte set are valid.
  2696. Index:    installation check;DVSIXDI
  2697.  
  2698. Format of information for one process (v1.00):
  2699. Offset    Size    Description
  2700.  00h    BYTE    flags
  2701.         bit 7: process slot is valid
  2702.  01h    WORD    offset into DESQVIEW.DVO of program's record if started from
  2703.         Open Windows menu, else undefined
  2704.  03h    WORD    Switch Windows window number
  2705.  05h    WORD    segment of process handle
  2706.  07h    WORD    number of tasks owned by process
  2707.  09h    WORD    mapping context of process (see INT 15/AX=1016h)
  2708.  0Bh    DWORD    hook for other programs
  2709.  
  2710. Format of information for one process (v1.10-v2.00):
  2711. Offset    Size    Description
  2712.  00h    BYTE    flags
  2713.         bit 7: valid record
  2714.         bit 6: (v2.00+) record is allocated; if bit 7 clear, process
  2715.             is "(starting)" and only offsets 01h and 09h are valid
  2716.         bit 5: (v2.00+) this app currently owns the CPU
  2717.         bit 4: reserved (0)
  2718.         bit 3: DESQview system task
  2719.         bit 2: reserved (0)
  2720.         bit 1: task has keyboard (currently unused)
  2721.         bit 0: task swapped out (currently unused)
  2722.  01h    WORD    Open Window keys
  2723.  03h    WORD    Switch Windows number
  2724.  05h    WORD    segment of process handle
  2725.  07h    WORD    number of tasks for process
  2726.  09h    WORD    process mapping context
  2727.  0Bh    DWORD    time process started (relative to start of DESQview)
  2728.  0Fh    DWORD    time process last got CPU (relative to start of DESQview)
  2729.  13h    DWORD    time process last gave up CPU (relative to start of DESQview)
  2730.  17h    DWORD    total CPU time since process started
  2731.  1Bh    DWORD    CPU time at start of current instantaneous interval
  2732.  1Fh    DWORD    CPU time in current instantaneous interval
  2733.  23h    DWORD    hook for other programs
  2734. Note:    all times are in 1/100s for v1.10, in 1/18s for v1.11+
  2735. --------Q-2FDE01BXFFFE-----------------------
  2736. INT 2F U - DESQview v2.26+ XDI - DVXMS.DVR - ???
  2737.     AX = DE01h
  2738.     BX = FFFEh
  2739.     CX = 4D47h ("MG")
  2740.     DX = 0052h (0,"R")
  2741. Return: AL = FFh
  2742.     DX = 584Dh
  2743. --------Q-2FDE02-----------------------------
  2744. INT 2F C - DESQview v2.26+ External Dev Interface - DV INITIALIZATION COMPLETE
  2745.     AX = DE02h
  2746.     BX = mapping context of DESQview
  2747.     DX = handle of DESQview system task
  2748. Note:    driver should pass this call to previous handler after doing its work
  2749. SeeAlso: AX=DE03h,AX=DE0Fh,INT 15/AX=5400h
  2750. --------Q-2FDE03-----------------------------
  2751. INT 2F C - DESQview v2.26+ External Dev Interface - DV TERMINATION
  2752.     AX = DE03h
  2753.     BX = mapping context of DESQview
  2754.     DX = handle of DESQview system task
  2755. Notes:    driver should pass this call to previous handler before doing its work
  2756.     DESQview makes this call when it is exiting, but before unhooking any
  2757.       interrupt vectors
  2758. SeeAlso: AX=DE02h,AX=DE0Fh,INT 15/AX=5407h
  2759. --------Q-2FDE04-----------------------------
  2760. INT 2F C - DESQview v2.26+ External Dev Interface - ADD PROCESS
  2761.     AX = DE04h
  2762.     BX = mapping context of new process (see INT 15/AX=1016h)
  2763.     DX = handle of process
  2764. Return: nothing
  2765. Notes:    XMS XDI handler (installed by default) allocates a 22-byte record
  2766.       (see below) from "common" memory to control access to XMS memory
  2767.     all DOS, BIOS, and DV API calls are valid in handler
  2768.     driver should pass this call to previous handler after processing it
  2769. SeeAlso: AX=DE05h,AX=DE06h,INT 15/AX=5401h
  2770.  
  2771. Format of XMS XDI structure:
  2772. Offset    Size    Description
  2773.  00h    DWORD    pointer to 10-byte record???
  2774.  04h    DWORD    pointer to next XMS XDI structure
  2775.  08h    WORD    mapping context
  2776.  0Ah    BYTE    ???
  2777.  0Bh  5 BYTEs    XMS entry point to return for INT 2F/AX=4310h
  2778.         (FAR jump to next field)
  2779.  10h  6 BYTEs    FAR handler for XMS driver entry point
  2780.         (consists of a FAR CALL followed by RETF)
  2781. --------Q-2FDE05-----------------------------
  2782. INT 2F C - DESQview v2.26+ External Dev Interface - REMOVE PROCESS
  2783.     AX = DE05h
  2784.     BX = mapping context of process (see INT 15/AX=1016h)
  2785.     DX = handle of last task in process
  2786. Return: nothing
  2787. Notes:    XMS XDI handler releases the structure allocated by AX=DE04h
  2788.     driver should pass this call to previous handler before processing it
  2789.     all DOS, BIOS, and DV API calls except those generating a task switch
  2790.       are valid in handler
  2791. SeeAlso: AX=DE04h,AX=DE07h,INT 15/AX=5402h
  2792. --------Q-2FDE06-----------------------------
  2793. INT 2F C - DESQview v2.26+ External Dev Interface - CREATE TASK
  2794.     AX = DE06h
  2795.     BX = mapping context of process containing task
  2796.     DX = handle of new task
  2797. Notes:    driver should pass this call to previous handler after processing it
  2798.     all DOS, BIOS, and DV API calls are valid in handler
  2799. --------Q-2FDE07-----------------------------
  2800. INT 2F C - DESQview v2.26+ External Dev Interface - TERMINATE TASK
  2801.     AX = DE07h
  2802.     BX = mapping context of process containing task
  2803.     DX = handle of task
  2804. Notes:    driver should pass this call to previous handler before processing it
  2805.     all DOS, BIOS, and DV API calls except those generating a task switch
  2806.       are valid in handler
  2807. SeeAlso: AX=DE04h,AX=DE06h,AX=DE10h
  2808. --------Q-2FDE08-----------------------------
  2809. INT 2F C - DESQview v2.26+ External Dev Interface - SAVE STATE
  2810.     AX = DE08h
  2811.     BX = mapping context of task being switched from (see INT 15/AX=1016h)
  2812.     DX = handle of task being switched from
  2813. Notes:    invoked prior to task swap, interrupts, etc
  2814.     driver should pass this call to previous handler after processing it
  2815. SeeAlso: AX=DE09h,INT 15/AX=5403h,INT 15/AX=DE27h
  2816. --------Q-2FDE09-----------------------------
  2817. INT 2F C - DESQview v2.26+ External Dev Interface - RESTORE STATE
  2818.     AX = DE09h
  2819.     BX = mapping context of task being switched to (see INT 15/AX=1016h)
  2820.     DX = handle of task being switched to
  2821. Notes:    state is restored except for interrupts
  2822.     driver should pass this call to previous handler before processing it
  2823. SeeAlso: AX=DE08h,INT 15/AX=5404h,INT 15/AX=DE27h
  2824. --------Q-2FDE0A-----------------------------
  2825. INT 2F C - DESQview v2.26+ External Dev Interface - CHANGE KEYBOARD FOCUS
  2826.     AX = DE0Ah
  2827.     BX = mapping context of task receiving focus
  2828.     DX = handle of running task
  2829. Notes:    driver should pass this call to previous handler before processing it
  2830.     this call often occurs inside a keyboard interrupt
  2831.     DV 2.42 does not provide this call to XDI handlers running inside a
  2832.       window; instead, it directly calls the INT 2F handler which was
  2833.       active at the time DV started
  2834. SeeAlso: INT 15/AX=DE26h,INT 15/AX=DE2Fh
  2835. --------Q-2FDE0B-----------------------------
  2836. INT 2F C - DESQview v2.26+ External Dev Interface - DVP PROCESSING COMPLETE
  2837.     AX = DE0Bh
  2838.     BX = mapping context of DESQview system task
  2839.     CX = number of system memory paragraphs required for the use of all
  2840.         XDI drivers (DV will add this to system memory in DVP buffer)
  2841.     DX = handle of DESQview system task
  2842.     SI = mapping context of new process if it starts
  2843.     ES:DI -> DVP buffer
  2844. Return: CX incremented as needed
  2845. Notes:    once DV invokes this function, the DVP buffer contents may be changed
  2846.     driver should pass this call to previous handler before processing it
  2847. --------Q-2FDE0C-----------------------------
  2848. INT 2F C - DESQview v2.26+ External Dev Interface - SWAP OUT PROCESS
  2849.     AX = DE0Ch
  2850.     BX = mapping context of task being swapped out (see INT 15/AX=1016h)
  2851.     DX = handle of DESQview system task
  2852. Note:    driver should pass this call to previous handler after processing it
  2853. --------Q-2FDE0D-----------------------------
  2854. INT 2F C - DESQview v2.26+ External Dev Interface - SWAP IN PROCESS
  2855.     AX = DE0Dh
  2856.     BX = mapping context of process just swapped in (see INT 15/AX=1016h)
  2857.     DX = handle of DESQview system task
  2858. Note:    driver should pass this call to previous handler before processing it
  2859. --------Q-2FDE0E-----------------------------
  2860. INT 2F C - DESQview v2.26+ External Dev Interface - DVP START FAILED
  2861.     AX = DE0Eh
  2862.     BX = mapping context of DESQview system task
  2863.     DX = handle of DESQview system task
  2864.     SI = mapping context of failed process (same as for call to AX=DE0Bh)
  2865. Note:    driver should pass this call to previous handler after processing it
  2866. --------Q-2FDE0F-----------------------------
  2867. INT 2F C - DESQview v2.50+ External Dev Interface - INITIALIZE DV
  2868.     AX = DE0Fh
  2869. Note:    DESQview 2.50+ calls this function just before it completes its
  2870.       initialization.  At the time of the call, DESQview has not yet
  2871.       changed any interrupt vectors
  2872. SeeAlso: AX=DE02h
  2873. --------Q-2FDE10-----------------------------
  2874. INT 2F C - DESQview v2.50+ External Dev Interface - FREE TASK
  2875.     AX = DE10h
  2876.     BX = mapping context of process (see INT 15/AX=1016h)
  2877.     DX = task handle of process
  2878. Note:    DESQview 2.50+ calls this function before it frees the task; it is
  2879.       similar to AX=DE07h but allows the XDI handler to make calls which
  2880.       cause context switches
  2881. SeeAlso: AX=DE06h,AX=DE07h
  2882. --------c-2FDF00-----------------------------
  2883. INT 2F - HyperWare programs - INSTALLATION CHECK
  2884.     AX = DF00h
  2885.     BX = product code
  2886.         4248h ('BH') HyperStb
  2887.         4448h ('DH') HyperDisk v4.20+
  2888.         4B48h ('KH') HyperKey
  2889.         5348h ('SH') HyperScreen
  2890.     CX = 0000h
  2891.     DX = 0000h
  2892. Return: AL = status
  2893.         00h not installed
  2894.         FFh multiplex number in use
  2895.         CX = 5948h ('YH') if selected product installed
  2896.         ---HyperDisk---
  2897.         BX = code segment of resident portion
  2898.         DX = HyperDisk local data version
  2899. Program: HyperDisk is a shareware disk cache by HyperWare (Roger Cross)
  2900. Note:    AH=DFh is the default; if it is already in use by some other program,
  2901.       HyperWare programs then scan multiplex numbers from C0h through FFh
  2902. SeeAlso: INT 13/AX=8EEDh
  2903. --------c-2FDF01BX4448-----------------------
  2904. INT 2F - HyperDisk v4.50+ - GET CURRENT CACHE STATE
  2905.     AX = DF01h
  2906.     BX = 4448h ('DH')
  2907. Return: AX = 0000h if function supported
  2908.         BX = number of cache buffers in use
  2909.         CX = number of cache buffers which have been modified
  2910.         DL = caching flags (see below)
  2911. Note:    AH=DFh is the default; if it is already in use by some other program,
  2912.       HyperWare programs then scan multiplex numbers from C0h through FFh
  2913. SeeAlso: AX=DF00h,AX=DF02h
  2914.  
  2915. Bitfields for caching flags:
  2916.  bit 0    staged writes enabled for floppy disks
  2917.  bit 1    staged writes enabled for hard disks
  2918.  bit 2    writes verified on floppy disks
  2919.  bit 3    writes verified on hard disks
  2920.  bit 4    reserved (0)
  2921.  bit 5    reserved (0)
  2922.  bit 6    floppy caching enabled
  2923.  bit 7    all caching functions enabled
  2924. --------c-2FDF02BX4448-----------------------
  2925. INT 2F - HyperDisk v4.50+ - SET CACHE STATE
  2926.     AX = DF02h
  2927.     BX = 4448h ('DH')
  2928.     DL = new caching flags (see AX=DF01h)
  2929. Return: AX = 0000h if supported
  2930.         BX = number of cache buffers in use
  2931.         CX = number of cache buffers which have been modified
  2932.         DL = previous caching flags (see AX=DF01h)
  2933. Program: HyperDisk is a shareware disk cache by HyperWare (Roger Cross)
  2934. Note:    AH=DFh is the default; if it is already in use by some other program,
  2935.       HyperWare programs then scan multiplex numbers from C0h through FFh
  2936. SeeAlso: AX=DF00h,AX=DF01h
  2937. --------U-2FE000-----------------------------
  2938. INT 2F - SETDRVER.COM v2.10+ - INSTALLATION CHECK
  2939.     AX = E000h
  2940. Return: AX = 4A52h ("JR") if present
  2941. Program: SETDRVER is a public domain TSR by Jacob Rieper which sets the
  2942.       apparent DOS version analogously to MS-DOS SETVER
  2943. Note:    this installation check differs from the usual one of returning AL=FFh
  2944. SeeAlso: AX=E001h,INT 21/AH=52h
  2945. --------K-2FE000DX5354-----------------------
  2946. INT 2F - StuffIt v3.21+ - INSTALLATION CHECK
  2947.     AX = E000h
  2948.     DX = 5354h ("ST")
  2949. Return: AL = FFh if installed
  2950.         BX = version (BH = major, BL = BCD minor)
  2951.         DX = segment of resident code
  2952. Program: StuffIt is a freeware delayed keyboard stuffer by Terje Mathisen
  2953. --------U-2FE001-----------------------------
  2954. INT 2F - SETDRVER.COM v2.10+ - GET SETDRVER VERSION
  2955.     AX = E001h
  2956. Return: AH = major version
  2957.     AL = minor version
  2958. SeeAlso: AX=E000h
  2959. --------U-2FE002-----------------------------
  2960. INT 2F - SETDRVER.COM v2.10+ - GET ORIGINAL DOS VERSION INFO
  2961.     AX = E002h
  2962. Return: AL = FFh if successful
  2963.         BH = major DOS version
  2964.         BL = minor DOS version
  2965.         CH = DOS version flag
  2966.         CL = OEM number
  2967.         DH = major DR-DOS version number (FFh if unknown)
  2968.         DL = minor DR-DOS version number (FFh if unknown)
  2969. SeeAlso: AX=E003h,AX=E007h,INT 21/AH=30h
  2970. --------U-2FE003-----------------------------
  2971. INT 2F - SETDRVER.COM v2.10+ - RESET INTERNAL VARIABLES
  2972.     AX = E003h
  2973.     BH = new major DOS version
  2974.     BL = new minor DOS version
  2975.     CH = new DOS version flag
  2976.     CL = new DOS revision number
  2977.     DH = new OEM number
  2978. SeeAlso: AX=E002h
  2979. --------U-2FE004-----------------------------
  2980. INT 2F - SETDRVER.COM v2.10+ - ENABLE TSR
  2981.     AX = E004h
  2982. Return: AL = FFh if successful
  2983. SeeAlso: AX=E000h,AX=E005h,AX=E006h
  2984. --------U-2FE005-----------------------------
  2985. INT 2F - SETDRVER.COM v2.10+ - DISABLE TSR
  2986.     AX = E005h
  2987. Return: AL = FFh if successful
  2988. SeeAlso: AX=E000h,AX=E004h,AX=E006h
  2989. --------U-2FE006-----------------------------
  2990. INT 2F - SETDRVER.COM v2.10+ - GET TSR STATUS
  2991.     AX = E006h
  2992. Return: AL = FFh if successful
  2993.         BL = status
  2994.         01h resident and active
  2995.         02h resident and inactive
  2996. --------U-2FE007-----------------------------
  2997. INT 2F - SETDRVER.COM v2.10+ - GET TaskMAX STATUS AT INSTALLATION
  2998.     AX = E007h
  2999. Return: AL = FFh if successful
  3000.         BL = status
  3001.         00h if TaskMAX not loaded before SETDRVER
  3002.         FFh if TaskMAX was loaded before SETDRVER
  3003. SeeAlso: AX=E003h
  3004. --------U-2FE0-------------------------------
  3005. INT 2F - SETDRVER.COM - RESERVED FOR FUTURE USE
  3006.     AH = E0h
  3007.     AL = 08h-10h
  3008. --------K-2FE100-----------------------------
  3009. INT 2F - Phantom2 v1.1 - INSTALLATION CHECK
  3010.     AX = E100h
  3011. Return: AX = 0001h if installed
  3012.         DS:SI -> ASCIZ hotkey name
  3013.         DS:DI -> ASCIZ recording filename
  3014. Program: Phantom of the Keyboard II is a shareware keystroke recorder/replayer
  3015.       by P2 Enterprises
  3016. SeeAlso: AX=E101h,AX=E102h,AX=E300h
  3017. --------K-2FE101-----------------------------
  3018. INT 2F - Phantom2 v1.1 - FUNCTION REQUEST
  3019.     AX = E101h
  3020.     BX = function mask (see below)
  3021.     CX = code for hotkey (as returned by INT 16/AH=00h) if BX bit 6 set
  3022.     DS:DX -> ASCIZ filespec if BX bit 7 set
  3023. SeeAlso: AX=E100h
  3024.  
  3025. Bitfields for function mask
  3026.  bit 0    record
  3027.  bit 1    play
  3028.  bit 2    QuickPlay
  3029.  bit 3    loop
  3030.  bit 4    mode display toggle
  3031.  bit 5    sound toggle
  3032.  bit 6    set hotkey
  3033.  bit 7    set filespec
  3034. --------K-2FE102-----------------------------
  3035. INT 2F - Phantom2 v1.1 - UNINSTALL
  3036.     AX = E102h
  3037. Return: AX = status
  3038.         0001h removal successful
  3039.         0002h not installed as TSR
  3040.         FFFFh disabled but not removed
  3041. SeeAlso: AX=E100h
  3042. --------K-2FE300-----------------------------
  3043. INT 2F - ANARKEY.COM - INSTALLATION CHECK
  3044.     AX = E300h
  3045. Return: AL = 00h not installed
  3046.          FEh if installed but suspended (v3.0+)
  3047.          FFh installed
  3048. Program: ANARKEY.COM is a commandline recall program by Steven Calwas
  3049. Note:    E3h is the default function number, but can be set to any value from
  3050.       C0h to FFh
  3051. SeeAlso: AX=E100h,AX=E301h,AX=E302h,AX=E303h,AX=E304h,AX=E305h,AX=E306h
  3052. SeeAlso: AX=E307h,INT 66"Newkey"
  3053. --------K-2FE301-----------------------------
  3054. INT 2F U - ANARKEY.COM v2+ - GET ???
  3055.     AX = E301h
  3056. Return: DX:BX -> ???
  3057. SeeAlso: AX=E300h
  3058.  
  3059. Format of returned data structure for ANARKEY v2.0:
  3060. Offset    Size    Description
  3061.  -7   7 BYTEs    signature ('ANARKEY')
  3062.  00h    WORD    ??? (I see 0001h in v2.0)
  3063.  02h    WORD    ??? (I see 0001h in v2.0)
  3064.  04h    WORD    ??? (I see 0 in v2.0)
  3065.  06h    WORD    PSP segment of next program loaded
  3066.  
  3067. Format of returned data structure for ANARKEY v3+:
  3068. Offset    Size    Description
  3069.  -1    BYTE    multiplex number
  3070.  00h    WORD    ??? (I see 0001h in v3.0-4.0)
  3071.  02h    WORD    ??? (I see 0001h in v3.0-4.0)
  3072.  04h    BYTE    ??? (I see 0 in v3.0-4.0)
  3073.  05h    WORD    PSP segment of next program loaded
  3074. --------K-2FE302-----------------------------
  3075. INT 2F U - ANARKEY.COM v3+ - ???
  3076.     AX = E302h
  3077.     BL = ???
  3078. Return: ???
  3079. SeeAlso: AX=E300h
  3080. --------K-2FE303-----------------------------
  3081. INT 2F U - ANARKEY.COM v3+ - ANARKMD API
  3082.     AX = E303h
  3083.     BL = function
  3084.         01h    toggle insert mode
  3085.         02h    display contents of history buffer
  3086.         03h    write history buffer to file
  3087.         ES:DX -> file name
  3088.         04h    clear history buffer
  3089.         05h    undefine all aliases
  3090.         06h    show aliases
  3091.         07h    list programs using Unix switchar
  3092.         08h    jump to bottom of history buffer    
  3093.         09h (v4.0) add string to history buffer
  3094.         ES:DX -> ASCIZ string
  3095.         0Ah (v4.0) ???
  3096.         ES:DX -> ???
  3097.         0Bh (v4.0) copy string to edit buffer for use as next input line
  3098.         ES:DX -> ASCIZ string
  3099.         0Ch (v4.0) ???
  3100.         0Dh (v4.0) copy ??? to ???
  3101.         0Eh (v4.0) ???
  3102.         0Fh (v4.0) ???
  3103.         10h (v4.0) set ??? flag
  3104.         11h (v4.0) display error message about running in EMS under Windows
  3105. Return: ???
  3106. SeeAlso: AX=E300h
  3107. --------K-2FE304-----------------------------
  3108. INT 2F U - ANARKEY.COM v2+ - ???
  3109.     AX = E304h
  3110.     BL = ???
  3111. Return: ???
  3112. SeeAlso: AX=E300h
  3113. --------K-2FE305-----------------------------
  3114. INT 2F U - ANARKEY.COM v3+ - ENABLE/SUSPEND ANARKEY
  3115.     AX = E305h
  3116.     BL = new state
  3117.         01h suspended
  3118.         00h enabled
  3119. SeeAlso: AX=E300h
  3120. --------K-2FE306-----------------------------
  3121. INT 2F U - ANARKEY.COM v4.0 - GET ???
  3122.     AX = E306h
  3123. Return: AX = ???
  3124. SeeAlso: AX=E300h
  3125. --------K-2FE307-----------------------------
  3126. INT 2F U - ANARKEY.COM v4.0 - GET ???
  3127.     AX = E307h
  3128. Return: AX = ???
  3129.     BL = ???
  3130. SeeAlso: AX=E300h
  3131. --------l-2FE44D-----------------------------
  3132. INT 2F - NDOS - API
  3133.     AX = E44Dh
  3134. Note:    as NDOS is a licensed version of 4DOS v3.03, the API is identical to
  3135.       that for 4DOS, except that AH=E4h instead of D4h and the installation
  3136.       check returns AX=44EEh instead of AX=44DDh
  3137. SeeAlso: AX=D44Dh,AX=E44Eh
  3138. --------l-2FE44EBX0000-----------------------
  3139. INT 2F - NDOS - AWAITING USER INPUT
  3140.     AX = E44Eh
  3141.     BX = 0000h NDOS is ready to display prompt
  3142.        = 0001h NDOS has displayed the prompt, about to accept user input
  3143. Return: handler must preserve SI, DI, BP, SP, DS, ES, and SS
  3144. SeeAlso: AX=E44Dh
  3145. --------E-2FED00-----------------------------
  3146. INT 2F - Phar Lap DOS EXTENDERS - INSTALLATION CHECK
  3147.     AX = ED00h
  3148.     BL = DOS extender
  3149.         01h 286dosx v1.3+ (Software Development Kit)
  3150.         02h 286dosx v1.3+ (Run-Time Kit)
  3151.         03h 386dosx v4.0+ (SDK)
  3152.         04h 386dosx v4.0+ (RTK)
  3153. Return: AL = status
  3154.         00h not installed
  3155.         FFh installed
  3156.         SI = 5048h ("PH")
  3157.         DI = 4152h ("AR")
  3158.         CH = major version number
  3159.         CL = minor version number
  3160.         DX = flags
  3161.             bit 0: running under DPMI
  3162.             bit 1: running under Phar Lap VMM
  3163. SeeAlso: AH=A1h,AX=F100h,AX=FBA1h
  3164. --------E-2FED80-----------------------------
  3165. INT 2F - Phar Lap 286|DOS Extender Lite v2.5 - ???
  3166.     AX = ED80h
  3167.     BL = DOS extender ID (see AX=ED00h)
  3168.     SI = 5048h ("PH")
  3169.     DI = 4152h ("AR")
  3170.     ???
  3171. Return: ???
  3172. --------y-2FEE00-----------------------------
  3173. INT 2F - GRIDLOC.EXE - INSTALLATION CHECK
  3174.     AX = EE00h
  3175. Return: AL = FFh if installed
  3176. Program: GRIDLOC is a PC security program by Intelligent Security Systems, Inc.
  3177. --------U-2FEE00-----------------------------
  3178. INT 2F - XVIEW - INSTALLATION CHECK
  3179.     AX = EE00h
  3180. Return: AX = 00FFh if installed
  3181. Program: XVIEW is a hypertext viewer by Flambeaux Software, Inc.
  3182. --------U-2FEE01-----------------------------
  3183. INT 2F - XVIEW - POP UP GIVING TOPIC SEARCH KEYWORD
  3184.     AX = EE01h
  3185.     DS:DX -> ASCIZ string containing case-insensitive keyword to look up
  3186. Return: AX = status (see below)
  3187. Note:    the specified keyword should be a hyperlink in the _IndexPage of some
  3188.       database; the current database is searched first
  3189. SeeAlso: AX=EE00h"XVIEW",AX=EE02h,AX=EE03h,AX=EE04h,AX=EE06h
  3190. Values for status:
  3191.  0000h successful
  3192.  00F1h unknown subfunction
  3193.  00F2h unable to pop up
  3194. --------U-2FEE02-----------------------------
  3195. INT 2F - XVIEW - POP UP GIVING A PAGE NUMBER
  3196.     AX = EE02h
  3197.     DX = physical page number or anchor page number (see below)
  3198. Return: AX = status (see AX=EE01h)
  3199. Note:    physical page numbers are assigned by the hypertext compiler, and
  3200.       will change if a page is inserted in the middle
  3201. SeeAlso: AX=EE00h"XVIEW",AX=EE01h,AX=EE05h,AX=EE06h
  3202.  
  3203. Values for anchor page number:
  3204.  FFEAh    _Credits
  3205.  FFECh    _SearchTopics
  3206.  FFEDh    _SearchText
  3207.  FFF0h    _ManualList
  3208.  FFF5h    _HelpOnHelp
  3209.  FFF8h    _HomePage
  3210.  FFF9h    _IndexPage
  3211. --------U-2FEE03-----------------------------
  3212. INT 2F - XVIEW - POP UP GIVING FILENAME AND SEARCH TOPIC OR PAGE NUMBER
  3213.     AX = EE03h
  3214.     DS:DX -> data packet (see below)
  3215. Return: AX = status (see AX=EE01h)
  3216. SeeAlso: AX=EE00h"XVIEW",AX=EE01h,AX=EE02h,AX=EE06h
  3217.  
  3218. Format of data packet:
  3219. Offset    Size    Description
  3220.  00h    DWORD    -> ASCIZ database filespec (0000h:0000h for current database)
  3221.  04h    DWORD    -> ASCIZ text to look up or 0000h:0000h
  3222.  08h    WORD    page number (0000h if keyword used)
  3223.  0Ah  6 BYTEs    reserved
  3224. --------U-2FEE04-----------------------------
  3225. INT 2F - XVIEW - POP UP AND READ SCREEN FOR SEARCH TOPIC KEYWORD
  3226.     AX = EE04h
  3227. Return: AX = status (see AX=EE01h)
  3228. Note:    equivalent to the action taken when the user presses the Alt-L hotkey
  3229. SeeAlso: AX=EE00h"XVIEW",AX=EE01h,AX=EE03h,AX=EE06h
  3230. --------U-2FEE05-----------------------------
  3231. INT 2F - XVIEW - POP UP TO MOST-RECENTLY VIEWED PAGE
  3232.     AX = EE05h
  3233. Return: AX = status (see AX=EE01h)
  3234. Note:    equivalent to the action taken when the user presses the Alt-H hotkey
  3235. SeeAlso: AX=EE00h"XVIEW",AX=EE02h,AX=EE06h
  3236. --------U-2FEE06-----------------------------
  3237. INT 2F - XVIEW - WAIT FOR POP-DOWN AND GET EXIT CODE
  3238.     AX = EE06h
  3239. Return: AX = status (see also AX=EE01h)
  3240.         0001h specified filename is not an xText database
  3241.         0002h no databases found
  3242.         0003h bad data in file
  3243.         0004h memory shortage
  3244.         0005h unable to open the requested file
  3245.         0007h invalid page number for file
  3246. Note:    although this call is not required, the exit code can alert the
  3247.       caller to problems; if the call is not made, the program should
  3248.       enforce a delay of about 1/2 second to allow the viewer to pop up,
  3249.       and should not get keyboard input or attempt disk accesses during
  3250.       the delay
  3251. SeeAlso: AX=EE00h"XVIEW",AX=EE01h,AX=EE02h,AX=EE03h,AX=EE04h,AX=EE05h
  3252. --------K-2FF000-----------------------------
  3253. INT 2F U - 4MAP - INSTALLATION CHECK
  3254.     AX = F000h
  3255. Return: AX = 00FFh
  3256. Program: 4MAP is a keybinding program for 4DOS (see AX=D44Dh) by Ho-Ping Tseng
  3257. Note:    returns AX=00FFh for any value of AL not listed here
  3258. SeeAlso: AX=D44Dh,AX=F001h,AX=F002h
  3259. --------K-2FF001-----------------------------
  3260. INT 2F U - 4MAP - GET KEY MAPPINGS
  3261.     AX = F001h
  3262. Return: ES:BX -> key mappings
  3263. SeeAlso: AX=F000h
  3264. --------K-2FF002-----------------------------
  3265. INT 2F U - 4MAP - INSERT CHARACTER INTO ???
  3266.     AX = F002h
  3267.     BL = character to insert
  3268. Return: AX = status
  3269.         0000h successful
  3270.         0001h buffer full
  3271. SeeAlso: AX=F000h,AX=F003h
  3272. --------K-2FF003-----------------------------
  3273. INT 2F U - 4MAP - INSERT CHARACTER INTO ???
  3274.     AX = F003h
  3275.     BL = character to insert
  3276. Return: AX = status
  3277.         0000h successful
  3278.         0001h buffer full
  3279. Program: 4MAP is a keybinding program for 4DOS (see AX=D44Dh) by Ho-Ping Tseng
  3280. SeeAlso: AX=F000h,AX=F002h
  3281. --------m-2FF1-------------------------------
  3282. INT 2F U - MIN-MEM v2.11 - INSTALLATION CHECK
  3283.     AH = F1h
  3284.     AL <> F1h
  3285. Return: AL = F1h if installed
  3286. Program: MIN-MEM is a shareware TSR manager by Biologic which permits up to 24
  3287.       popup TSRs to be loaded but swapped out to disk, EMS, or XMS.     One
  3288.       TSR at a time is brought back into memory at the user's request.
  3289. --------E-2FF100-----------------------------
  3290. INT 2F - DOS EXTENDER INSTALLATION CHECK
  3291.     AX = F100h
  3292. Return: AL = FFh if DOS extender present
  3293.         SI = 444Fh ("DO")
  3294.         DI = 5358h ("SX")
  3295. Note:    supported or soon to be supported by Phar Lap, Rational, Ergo, and IGC
  3296. SeeAlso: AH=A1h,AX=ED00h,AX=FBA1h/BX=0081h,INT 15/AX=BF02h
  3297. --------d-2FF700-----------------------------
  3298. INT 2F - AUTOPARK.COM - INSTALLATION CHECK
  3299.     AX = F700h
  3300. Return: AL = 00h not installed
  3301.          FFh installed
  3302. Program: AUTOPARK.COM is a resident hard disk parker by Alan D. Jones
  3303. --------d-2FF701-----------------------------
  3304. INT 2F - AUTOPARK.COM - SET PARKING DELAY
  3305.     AX = F701h
  3306.     BX:CX = 32-bit count of 55ms timer ticks
  3307. --------d-2FF800CX4455-----------------------
  3308. INT 2F U - SuperStor PRO 2XON.COM - INSTALLATION CHECK
  3309.     AX = F800h
  3310.     CX = 4455h ("DU")
  3311.     DL = 45h ("E")
  3312. Return: AL = FFh if installed
  3313.         ES:BX -> ASCII signature "Universal Data Exchange"
  3314. Program: SuperStor is a disk-compression program by Addstor.
  3315. Note:    returns AX=0001h if AL is not 00h or 01h
  3316. SeeAlso: AX=1001h,AX=F801h
  3317. --------d-2FF801CX4455-----------------------
  3318. INT 2F U - SuperStor PRO 2XON.COM - UNINSTALL
  3319.     AX = F801h
  3320.     CX = 4455h ("DU")
  3321.     DL = 45h ("E")
  3322.     ES:BX = return address if successful
  3323. Return: at specified address if successfully removed from memory
  3324.     else
  3325.         AL = error code
  3326.         ???
  3327. Program: SuperStor is a disk-compression program by Addstor.
  3328. Note:    returns AX=0001h if AL is not 00h or 01h
  3329. SeeAlso: AX=1001h,AX=F800h
  3330. --------*-2FFB-------------------------------
  3331. INT 2F - Multiplex - RESERVED BY BORLAND INTERNATIONAL
  3332.     AH = FBh
  3333. --------a-2FFB00-----------------------------
  3334. INT 2F U - AutoBraille v1.1A - INSTALLATION CHECK
  3335.     AX = FB00h
  3336. Return: AX = 00FFh if installed
  3337. Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  3338. SeeAlso: INT 10/AX=3800h,INT 14/AX=F0F1h
  3339. --------U-2FFB00-----------------------------
  3340. INT 2F U - Jot-It! v1.50 - INSTALLATION CHECK
  3341.     AX = FB00h
  3342. Return: AX = FFFFh if installed
  3343.         BX = version (BCD, BH=major, BL=minor)
  3344. SeeAlso: AX=FB03h"Jot-It",AX=FB01h"Jot-It"
  3345. --------a-2FFB01-----------------------------
  3346. INT 2F U - AutoBraille v1.1A - ???
  3347.     AX = FB01h
  3348.     ???
  3349. Return: ???
  3350. --------U-2FFB01-----------------------------
  3351. INT 2F U - Jot-It! v1.50 - GET USER NAME
  3352.     AX = FB01h
  3353. Return: DX:BX -> ASCIZ user name
  3354. SeeAlso: AX=FB02h"Jot-It"
  3355. --------a-2FFB02-----------------------------
  3356. INT 2F U - AutoBraille v1.1A - ???
  3357.     AX = FB02h
  3358. Return: AH = ???
  3359.     AL = ???
  3360. --------U-2FFB02-----------------------------
  3361. INT 2F U - Jot-It! v1.50 - GET MESSAGE DIRECTORY
  3362.     AX = FB02h
  3363. Return: DX:BX -> ASCIZ name of directory in which messages are stored
  3364. SeeAlso: AX=FB01h"Jot-It"
  3365. --------a-2FFB03-----------------------------
  3366. INT 2F U - AutoBraille v1.1A - GET NEXT ???
  3367.     AX = FB03h
  3368. Return: AX = ???
  3369. --------U-2FFB03-----------------------------
  3370. INT 2F U - Jot-It! v1.50 - UNINSTALL
  3371.     AX = FB03h
  3372. Return: resident code removed from memory
  3373. Note:    CAUTION: NO checks are performed to ensure that the interrupt vectors
  3374.       being unhooked (08h,09h,28h,2Fh) actually point at the Jot-It! code
  3375. SeeAlso: AX=FB00h"Jot-It"
  3376. --------a-2FFB-------------------------------
  3377. INT 2F U - AutoBraille v1.1A - SET ???
  3378.     AH = FBh
  3379.     AL = 04h-08h
  3380. Return: AX = 0000h
  3381. --------a-2FFB-------------------------------
  3382. INT 2F U - AutoBraille v1.1A - SET ???
  3383.     AH = FBh
  3384.     AL = 09h-0Fh (???, 0Eh = COM1, 0Fh = COM2)
  3385. Return: ???
  3386. Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  3387. --------a-2FFB-------------------------------
  3388. INT 2F U - AutoBraille v1.1A - SET ???
  3389.     AH = FBh
  3390.     AL = 10h-1Fh
  3391.     ???
  3392. Return: ???
  3393. --------a-2FFB20-----------------------------
  3394. INT 2F U - AutoBraille v1.1A - SET ??? FLAGS
  3395.     AX = FB20h
  3396.     BL = flags to set
  3397. SeeAlso: AX=FB21h"AutoBraille"
  3398. --------a-2FFB21-----------------------------
  3399. INT 2F U - AutoBraille v1.1A - CLEAR ??? FLAGS
  3400.     AX = FB21h
  3401.     BL = flags to clear
  3402. SeeAlso: AX=FB20h"AutoBraille"
  3403. --------a-2FFB22-----------------------------
  3404. INT 2F U - AutoBraille v1.1A - SET ???
  3405.     AX = FB22h
  3406.     BL = ???
  3407. Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  3408. --------a-2FFB28-----------------------------
  3409. INT 2F U - AutoBraille v1.1A - ???
  3410.     AX = FB28h
  3411.     BX = ???
  3412.     ???
  3413. Return: ???
  3414. SeeAlso: AX=FB29h"AutoBraille"
  3415. --------a-2FFB29-----------------------------
  3416. INT 2F U - AutoBraille v1.1A - ???
  3417.     AX = FB29h
  3418.     BX = ???
  3419.     ???
  3420. Return: ???
  3421. SeeAlso: AX=FB28h"AutoBraille"
  3422. --------a-2FFB-------------------------------
  3423. INT 2F U - AutoBraille v1.1A - SET ???
  3424.     AH = FBh
  3425.     AL = 2Bh-34h
  3426.     BX = ???
  3427. --------a-2FFB35-----------------------------
  3428. INT 2F U - AutoBraille v1.1A - SET ???
  3429.     AX = FB35h
  3430.     BL = ???
  3431. --------a-2FFB36-----------------------------
  3432. INT 2F U - AutoBraille v1.1A - SET ???
  3433.     AX = FB36h
  3434.     BL = ???
  3435. --------a-2FFB37-----------------------------
  3436. INT 2F U - AutoBraille v1.1A - SET ???
  3437.     AX = FB37h
  3438.     BL = ???
  3439. Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  3440. --------E-2FFB42BX0001-----------------------
  3441. INT 2F PU - Borland C++ DPMILOAD.EXE - INSTALLATION CHECK???
  3442.     AX = FB42h
  3443.     BX = 0001h
  3444. Return: AX = version number??? (AL=major, AH=minor)
  3445.     CX = next-selector increment
  3446. ---BC2.0---
  3447.     ES:BX -> 80-byte buffer for ???
  3448.     DX = DPMI version
  3449. ---BC3.0---
  3450.     BX = ??? (0000h)
  3451.     DX = ???
  3452.     ES:SI -> list of valid selectors ???
  3453. Notes:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  3454.       as version 1.000, while the version distributed with BC++ 3.0
  3455.       identifies itself as version 1.0; the former is 10864 bytes, the
  3456.       latter 22180 bytes.  The BC2.0 version is a DPMI loader, while
  3457.       the BC3.0 version also adds a DPMI host and DOS extender
  3458.     the BC++ 2.0 version displays an error message if called with BX
  3459.       values other than 0001h-0008h
  3460. SeeAlso: AX=1687h,AX=FB42h/BX=1001h,AX=FB43h
  3461. --------E-2FFB42BX0002-----------------------
  3462. INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - ALLOCATE MEMORY
  3463.     AX = FB42h
  3464.     BX = 0002h
  3465.     CX = size in bytes
  3466.     DX = bit flags
  3467.         bit 2: set to allocate DOS memory, clear for DPMI memory
  3468.     SI = selector of descriptor to be modified to access allocated memory
  3469.     DI = selector of a second descriptor to be modified
  3470. Return: AX = ??? or 0000h on error
  3471.     CX:DX = linear base address of DPMI memory block
  3472.     SI:DI = handle for DPMI memory block or FFFFh:FFFFh
  3473.     ???
  3474. Note:    two segment descriptors may be set if a code and an aliased data
  3475.       segment are required; if only one descriptor is needed, SI should
  3476.       equal DI on entry
  3477. BUG:    when allocating DOS memory, the code computes the linear address by
  3478.       multiplying the segment number by 4 rather than shifting by 4
  3479. SeeAlso: AX=FB42h/BX=0003h,AX=FB42h/BX=0008h,INT 31/AX=0501h
  3480. --------E-2FFB42BX0002-----------------------
  3481. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ALLOCATE MEMORY
  3482.     AX = FB42h
  3483.     BX = 0002h
  3484.     ES:SI -> memory block info (see below)
  3485. Return: ???
  3486. Note:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  3487.       as version 1.000, while the version distributed with BC++ 3.0
  3488.       identifies itself as version 1.0; the former is 10864 bytes, the
  3489.       latter 22180 bytes.
  3490. SeeAlso: AX=FB42h/BX=0003h,AX=FB42h/BX=0008h,INT 31/AX=0501h
  3491.  
  3492. Format of memory block info:
  3493. Offset    Size    Description
  3494.  00h    WORD    flags
  3495.         bit 0: set if data segment rather than code segment
  3496.         bit 1: information valid
  3497.         bit 2: set if DOS memory block rather than DPMI memory block
  3498.         bit 4: ???
  3499.         bit 15: set if no LDT selectors for memory block???
  3500.  02h    DWORD    block size in bytes
  3501. ---DPMI memory block---
  3502.  06h    DWORD    DPMI memory block handle
  3503. ---DOS memory block---
  3504.  06h    WORD    real-mode segment of memory block
  3505.  08h    WORD    selector of memory block
  3506. ---
  3507.  0Ah    DWORD    linear address of memory
  3508.  0Eh    WORD    memory operation error code
  3509.         0008h no more free LDT descriptors
  3510. ---if flags bit 0 clear---
  3511.  10h    WORD    code segment selector for memory block or 0000h or FFFFh
  3512.  12h    WORD    data alias selector for memory block or 0000h or FFFFh
  3513. ---if flags bit 0 set---
  3514.  10h    WORD    data segment selector for memory block or 0000h or FFFFh
  3515.  12h    WORD    unused???
  3516. --------E-2FFB42BX0003-----------------------
  3517. INT 2F PU - Borland C++ DPMILOAD.EXE - GET AVAILABLE MEMORY
  3518.     AX = FB42h
  3519.     BX = 0003h
  3520. Return: DX:AX = size of largest free block in paragraphs
  3521.         0000h:0000h on error (BC3.0 version only)
  3522. Note:    AX and DX are destroyed on error, but no other error indicator is
  3523.       returned, under the BC++ 2.0 version of DPMILOAD
  3524. SeeAlso: AX=FB42h/BX=0002h
  3525. --------E-2FFB42BX0004-----------------------
  3526. INT 2F PU - Borland C++ DPMILOAD.EXE - LOAD PROTECTED-MODE EXECUTABLE???
  3527.     AX = FB42h
  3528.     BX = 0004h
  3529.     DS:DX -> ASCIZ filename of protected-mode executable
  3530. Return: CX = selector of ??? or 0000h
  3531. ---BC3.0---
  3532.     DX = status (0000h,FFF4h,others???) (see below)
  3533. Note:    the filename may also be terminated by a CR rather than a NUL under the
  3534.       BC++ 3.0 version of DPMILOAD
  3535.  
  3536. Values for status:
  3537.  0000h    successful
  3538.  0001h    ??? failure
  3539.  0002h    invalid selector
  3540.  0004h    unknown error
  3541.  0008h    no more LDT descriptors available???
  3542.  FFDEh    unable to set descriptor
  3543.  FFDFh    unable to get segment base address
  3544.  FFE0h    ???
  3545.  FFF2h    invalid parameter value
  3546.  FFF4h    component of filename too long (name not in 8.3 format)
  3547.  FFF5h    pathname too long (>79 chars)
  3548.  FFF6h    ???
  3549.  FFF8h    ???
  3550.  FFF9h    index out of range
  3551.  FFFAh    ???
  3552.  FFFCh    invalid access to code segment???
  3553.  FFFEh    ???
  3554.  FFFFh    general error
  3555. --------E-2FFB42BX0005-----------------------
  3556. INT 2F PU - Borland C++ DPMILOAD.EXE - GET ADDRESS OF ??? BY NAME
  3557.     AX = FB42h
  3558.     BX = 0005h
  3559.     CX = selector of DPMILOAD data (see below)
  3560.     DS:DX -> ASCIZ or CR-terminated name of ??? (case ignored)
  3561. Return: DX = status (see AX=FB42h/BX=0004h)
  3562.         0000h successful
  3563.         AX:BX -> ??? FAR function (called with two words on top of stk)
  3564.         else
  3565.         BX destroyed
  3566. SeeAlso: AX=FB42h/BX=0006h,AX=FB42h/BX=000Eh
  3567.  
  3568. Format of DPMILOAD data:
  3569. Offset    Size    Description
  3570.  00h 12 BYTEs    ???
  3571.  0Ch    WORD    ??? bit flags
  3572.  0Eh 14 BYTEs    ???
  3573.  1Ch    WORD    number of memory control records
  3574.  1Eh 25 BYTEs    ???
  3575.  37h    BYTE    ??? bit flags
  3576.         bit 4: data valid???
  3577.  38h  4 BYTEs    ???
  3578.  3Ch    WORD    ???
  3579.  3Eh 12 BYTEs    ???
  3580.  46h    BYTE    ??? counter
  3581.  47h    BYTE    ???
  3582.  48h    BYTE    ???
  3583.  49h    BYTE    ???
  3584.  4Ah    WORD    ???
  3585.  4Ch  2 BYTEs    ???
  3586.  4Eh    WORD    offset of array of 64-byte memory control records
  3587.  52h    WORD    offset of name list (see below)
  3588.  54h  4 BYTEs    ???
  3589.  58h    WORD    offset of array of 6-byte objects
  3590.  5Ah  8 BYTEs    ???
  3591.  62h  9 BYTEs    ASCIZ name for ???
  3592.  6Bh  9 BYTEs    ASCIZ name for ???
  3593.     ???
  3594.  
  3595. Format of name list entry [array]:
  3596. Offset    Size    Description
  3597.  00h    BYTE    length of name (00h if end of array)
  3598.  01h  N BYTEs    name
  3599.  N+1    WORD    1-based index into array of unknown 6-byte objects
  3600.  
  3601. Format of 6-byte objects:
  3602. Offset    Size    Description
  3603.  00h    BYTE    ???
  3604.  01h    BYTE    ???
  3605.  02h    BYTE    ???
  3606.  03h    BYTE    1-based index of memory control record
  3607.  04h    WORD    ???
  3608.  
  3609. Format of memory control record:
  3610. Offset    Size    Description
  3611.  00h 20 BYTEs    memory block info (see AX=FB42h/BX=0002h)
  3612.  14h  6 BYTEs    ???
  3613.  1Ah    BYTE    ???
  3614.  1Bh  2 BYTEs    ???
  3615.  1Dh    BYTE    ??? bit flags
  3616.  1Eh 14 BYTEs    ???
  3617.  2Ch    DWORD    pointer to ??? memory control record or 0000h:0000h
  3618.  30h    DWORD    pointer to ??? memory control record or 0000h:0000h
  3619.  34h    DWORD    pointer to next??? memory control record or 0000h:0000h
  3620.  38h    DWORD    pointer to prev??? memory control record or 0000h:0000h
  3621.  3Ch  4 BYTEs    ???
  3622. Note:    the pointers at offsets 2Ch and 30h form a doubly-linked list, as do
  3623.       the pointers at offsets 34h and 38h
  3624. --------E-2FFB42BX0006-----------------------
  3625. INT 2F PU - Borland C++ DPMILOAD.EXE - GET ADDRESS OF ??? BY NUMBER
  3626.     AX = FB42h
  3627.     BX = 0006h
  3628.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  3629.     DX = 1-based index into array of ??? 6-byte objects
  3630. Return: DX = status (see AX=FB42h/BX=0004h)
  3631.         0000h successful
  3632.         AX:BX -> ??? FAR function (called with two words on top of stk)
  3633.         else
  3634.         BX destroyed
  3635. SeeAlso: AX=FB42h/BX=0005h,AX=FB42h/BX=000Eh
  3636. --------E-2FFB42BX0007-----------------------
  3637. INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - ???
  3638.     AX = FB42h
  3639.     BX = 0007h
  3640.     CX = selector of ???
  3641. Return: ???
  3642. Note:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  3643.       as version 1.000, while the version distributed with BC++ 3.0
  3644.       identifies itself as version 1.0; the former is 10864 bytes, the
  3645.       latter 22180 bytes.
  3646. --------E-2FFB42BX0007-----------------------
  3647. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3648.     AX = FB42h
  3649.     BX = 0007h
  3650.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  3651.     ???
  3652. Return: DX = status (see AX=FB42h/BX=0004h)
  3653.         0000h successful    
  3654.         AX = ???
  3655. --------E-2FFB42BX0008-----------------------
  3656. INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - FREE MEMORY BLOCK
  3657.     AX = FB42h
  3658.     BX = 0008h
  3659.     CX = bit flags
  3660.         bit 2: set if DPMI memory, clear if DOS memory
  3661.     DX = selector of DOS memory block
  3662.     SI:DI = handle of DPMI memory block
  3663. Return: DX = 0000h on error, unchanged if succcessful
  3664. Note:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  3665.       as version 1.000, while the version distributed with BC++ 3.0
  3666.       identifies itself as version 1.0; the former is 10864 bytes, the
  3667.       latter 22180 bytes.
  3668. SeeAlso: AX=FB42h/BX=0002h
  3669. --------E-2FFB42BX0008-----------------------
  3670. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - FREE MEMORY BLOCK
  3671.     AX = FB42h
  3672.     BX = 0008h
  3673.     ES:SI -> memory block info (see AX=FB42h/BX=0002h"3.0")
  3674. Return: ???
  3675. SeeAlso: AX=FB42h/BX=0009h
  3676. --------E-2FFB42BX0009-----------------------
  3677. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - RESIZE MEMORY BLOCK
  3678.     AX = FB42h
  3679.     BX = 0009h
  3680.     ES:SI -> memory block info (see AX=FB42h/BX=0002h"3.0")
  3681.     ???
  3682. Return: ???
  3683. SeeAlso: AX=FB42h/BX=0008h"3.0"
  3684. --------E-2FFB42BX000A-----------------------
  3685. INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - INIT DPMI HOST AND SPAWN SUBSHELL
  3686.     AX = FB42h
  3687.     BX = 000Ah
  3688.     CX = 0001h
  3689.     DX = ???
  3690.     SI = ???
  3691. Return: after user exits subshell
  3692. Notes:    this call is used by DPMIRES; unlike most of the DPMILOAD calls, this
  3693.       function is not available in protected mode.
  3694.     the BC2.0 version of DPMILOAD is purely a DPMI loader, while the BC3.0
  3695.       version also adds a DPMI host and DOS extender.
  3696. SeeAlso: AX=FB42h/BX=0004h,AX=FB42h/BX=0015h
  3697. --------E-2FFB42BX000B-----------------------
  3698. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - UNUSED
  3699.     AX = FB42h
  3700.     BX = 000Bh
  3701. --------E-2FFB42BX000C-----------------------
  3702. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - FREE DESCRIPTORS FOR MEMORY BLOCK???
  3703.     AX = FB42h
  3704.     BX = 000Ch ???
  3705.     ES:SI -> memory block info ??? (see AX=FB42h/BX=0002h"3.0")
  3706. Return: DX = status???
  3707. SeeAlso: AX=FB42h/BX=000Fh
  3708. --------E-2FFB42BX000D-----------------------
  3709. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SIMULATE REAL MODE INTERRUPT
  3710.     AX = FB42h
  3711.     BX = 000Dh
  3712.     CX = number of words to copy from protected-mode to real mode stack
  3713.     DL = interrupt number
  3714.     DH = flags
  3715.         bit 0: reset the interrupt controller and A20 line
  3716.     ES:DI -> real-mode call structure (see INT 31/AX=0300h)
  3717. Return: CX = status
  3718.         0000h successful
  3719.         0001h failed
  3720. SeeAlso: INT 31/AX=0300h
  3721. --------E-2FFB42BX000E-----------------------
  3722. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ADDRESS OF ???
  3723.     AX = FB42h
  3724.     BX = 000Eh
  3725.     DS:DX -> ASCIZ or CR-terminated name of ???
  3726. Return: CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h) corresponding to
  3727.         name, 0000h on error
  3728. SeeAlso: AX=FB42h/BX=0006h,AX=FB42h/BX=001Fh
  3729. --------E-2FFB42BX000F-----------------------
  3730. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - REALLOCATE LDT DESCRPS TO MEMBLK???
  3731.     AX = FB42h
  3732.     BX = 000Fh
  3733.     ES:SI -> memory block info (see AX=FB42h/BX=0002h"3.0")
  3734. Return: ???
  3735. SeeAlso: AX=FB42h/BX=000Ch
  3736. --------E-2FFB42BX0010-----------------------
  3737. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - CONVERT SEGMENT TO SELECTOR
  3738.     AX = FB42h
  3739.     BX = 0010h
  3740.     DX = segment number
  3741. Return: CX = status (see also AX=FB42h/BX=0004h)
  3742.         0000h successful
  3743.         DX = selector number for descriptor
  3744.         0008h failed
  3745. SeeAlso: AX=FB42h/BX=0023h
  3746. --------E-2FFB42BX0011-----------------------
  3747. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3748.     AX = FB42h
  3749.     BX = 0011h
  3750.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  3751.     ???
  3752. Return: DX = status (see also AX=FB42h/BX=0004h)
  3753.         0000h successful
  3754.         AX:BX -> ??? name
  3755.         0002h invalid selector
  3756.         FFFEh ??? error
  3757. --------E-2FFB42BX0012-----------------------
  3758. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3759.     AX = FB42h
  3760.     BX = 0012h
  3761.     CX = selector for ???
  3762. Return: CX = selector for ???
  3763. --------E-2FFB42BX0013-----------------------
  3764. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3765.     AX = FB42h
  3766.     BX = 0013h
  3767.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  3768.     DX = 1-based index of ???
  3769. Return: CX = status (see also AX=FB42h/BX=0004h)
  3770.         0000h successful
  3771.         BX = ??? or 0000h
  3772.         0002h invalid selector
  3773.         FFF9h ??? error
  3774. --------E-2FFB42BX0014-----------------------
  3775. INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3776.     AX = FB42h
  3777.     BX = 0014h ???
  3778.         CX = 0001h
  3779.         Return: BX = 0000h
  3780. Note:    unlike most of the DPMILOAD functions, this call is available only in
  3781.       real or V86 mode
  3782. SeeAlso: AX=FB42h/BX=000Ah
  3783. --------E-2FFB42BX0015-----------------------
  3784. INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - UNINSTALL
  3785.     AX = FB42h
  3786.     BX = 0015h
  3787.     CX = 0001h
  3788. Return: ???
  3789. Note:    unlike most of the DPMILOAD functions, this call is available only in
  3790.       real or V86 mode
  3791. SeeAlso: AX=FB42h/BX=000Ah
  3792. --------E-2FFB42BX0016-----------------------
  3793. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ???
  3794.     AX = FB42h
  3795.     BX = 0016h
  3796.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  3797. Return: DX = status (see also AX=FB42h/BX=0004h)
  3798.         0000h successful
  3799.         CX = ???
  3800. --------E-2FFB42BX0017-----------------------
  3801. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3802.     AX = FB42h
  3803.     BX = 0017h
  3804.     CX = ???
  3805.     DX = ???
  3806.     ???
  3807. Return: DX = status (0000h,0001h) (see below)
  3808. --------E-2FFB42BX0018-----------------------
  3809. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET ???
  3810.     AX = FB42h
  3811.     BX = 0018h
  3812.     CX = ???
  3813. --------E-2FFB42BX0019-----------------------
  3814. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3815.     AX = FB42h
  3816.     BX = 0019h
  3817.     CX = selector for ???
  3818.     ???
  3819. Return: DX = status (see also AX=FB42h/BX=0004h)
  3820.         0000h successful
  3821.         CX = selector for ???
  3822. --------E-2FFB42BX001A-----------------------
  3823. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3824.     AX = FB42h
  3825.     BX = 001Ah
  3826.     CX = selector for ???
  3827.     ???
  3828. Return: DX = status (see also AX=FB42h/BX=0004h)
  3829.         0000h successful
  3830.         0004h failed
  3831.     CX:BX -> ???
  3832. --------E-2FFB42BX001B-----------------------
  3833. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3834.     AX = FB42h
  3835.     BX = 001Bh
  3836.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  3837.     DX = offset of ???
  3838. Return: DX = status (see also AX=FB42h/BX=0004h)
  3839.         0000h successful
  3840.         BX = selector for ???
  3841.         CX = selector for ???
  3842.         0002h invalid selector
  3843. --------E-2FFB42BX001C-----------------------
  3844. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3845.     AX = FB42h
  3846.     BX = 001Ch
  3847.     ES = selector for DPMILOAD data (see AX=FB42h/BX=0005h)
  3848.     CX = 1-based index of ???
  3849.     DX = 1-based index of ???
  3850. Return: DX = status (0000h,0002h,FFF9h) (see AX=FB42h/BX=0004h)
  3851. --------E-2FFB42BX001D-----------------------
  3852. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ???
  3853.     AX = FB42h
  3854.     BX = 001Dh
  3855. Return: CX:DX = ???
  3856. --------E-2FFB42BX001E-----------------------
  3857. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3858.     AX = FB42h
  3859.     BX = 001Eh
  3860.     CX = ???
  3861.     ???
  3862. Return: DX = status (see also AX=FB42h/BX=0004h)
  3863.         0000h successful
  3864.         FFF7h ??? error
  3865.     CX:BX -> ???
  3866. --------E-2FFB42BX001F-----------------------
  3867. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ADDRESS OF ???
  3868.     AX = FB42h
  3869.     BX = 001Fh
  3870.     DS:DX -> 8-character name of ???
  3871.     ???
  3872. Return: CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h) for ???
  3873.         0000h on error
  3874. SeeAlso: AX=FB42h/BX=000Eh
  3875. --------E-2FFB42BX0020-----------------------
  3876. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - NULL FUNCTION???
  3877.     AX = FB42h
  3878.     BX = 0020h
  3879. Return: DX = ??? (always 0000h)
  3880. --------E-2FFB42BX0021-----------------------
  3881. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET PROCESSOR EXCEPTION HANDLER VECT
  3882.     AX = FB42h
  3883.     BX = 0021h
  3884.     CL = exception number (00h-1Fh)
  3885. Return: DX = status (see also AX=FB42h/BX=0004h)
  3886.         0000h successful
  3887.         AX:BX = selector:offset of handler
  3888.         FFF2h unable to get exception handler vector
  3889. SeeAlso: AX=FB42h/BX=0022h,AX=FB42h/BX=0024h,INT 31/AX=0202h
  3890. --------E-2FFB42BX0022-----------------------
  3891. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET PROCESSOR EXCEPTION HANDLER VECT
  3892.     AX = FB42h
  3893.     BX = 0022h
  3894.     CL = exception number (00h-1Fh)
  3895.     SI:DX = selector:offset of new handler
  3896. Return: DX = status (0000h,0004h,FFF2h) (see AX=FB42h/BX=0004h)
  3897. SeeAlso: AX=FB42h/BX=0021h,AX=FB42h/BX=0025h,INT 31/AX=0203h
  3898. --------E-2FFB42BX0023-----------------------
  3899. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - CONVERT SELECTOR TO SEGMENT NUMBER
  3900.     AX = FB42h
  3901.     BX = 0023h
  3902.     CX = selector
  3903. Return: DX = status (see also AX=FB42h/BX=0004h)
  3904.         0000h successful
  3905.         CX = real-mode segment number
  3906.         FFF2h descriptor has invalid base address for real-mode segment
  3907. SeeAlso: AX=FB42h/BX=0010h
  3908. --------E-2FFB42BX0024-----------------------
  3909. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET PROTECTED-MODE INTERRUPT VECTOR
  3910.     AX = FB42h
  3911.     BX = 0024h
  3912.     CL = interrupt number
  3913. Return: DX = status (0000h) (see also AX=FB42h/BX=0004h)
  3914.     AX:BX = selector:offset of handler
  3915. SeeAlso: AX=FB42h/BX=0025h,INT 31/AX=0204h
  3916. --------E-2FFB42BX0025-----------------------
  3917. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET PROTECTED-MODE INTERRUPT VECTOR
  3918.     AX = FB42h
  3919.     BX = 0025h
  3920.     CL = interrupt number
  3921.     SI:DX = selector:offset of new handler
  3922. Return: DX = status (0000h,0004h,FFF2h) (see AX=FB42h/BX=0004h)
  3923. SeeAlso: AX=FB42h/BX=0024h,INT 31/AX=0205h
  3924. --------E-2FFB42BX0026-----------------------
  3925. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  3926.     AX = FB42h
  3927.     BX = 0026h
  3928.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  3929.     DX = 1-based index of ???
  3930.     ???
  3931. Return: DX = status (0000h,0002h,FFF9h) (see AX=FB42h/BX=0004h)
  3932.         0000h successful
  3933.         BX = offset of ??? within data structure
  3934. --------E-2FFB42BX0027-----------------------
  3935. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ???
  3936.     AX = FB42h
  3937.     BX = 0027h
  3938.     CX = selector of DPMILOAD data (see AX=FB42h/BX=0005h)
  3939.     DX = offset of ???
  3940. Return: DX = status (see also AX=FB42h/BX=0004h)
  3941.         0000h successful
  3942.         BX = ???
  3943. --------E-2FFB42BX0080-----------------------
  3944. INT 2F U - ??? - CALLED BY Borland C++ 3.0 DPMILOAD.EXE
  3945.     AX = FB42h
  3946.     BX = 0080h
  3947.     ???
  3948. Return: AX = ???
  3949.     ???
  3950. --------E-2FFB42BX0081-----------------------
  3951. INT 2F U - ??? - CALLED BY Borland C++ 3.0 DPMILOAD.EXE
  3952.     AX = FB42h
  3953.     BX = 0081h
  3954.     ???
  3955. Return: AX = ???
  3956.     ???
  3957. --------E-2FFB42BX1001-----------------------
  3958. INT 2F U - Borland RTM.EXE 1.0 - INSTALLATION CHECK???
  3959.     AX = FB42h
  3960.     BX = 1001h
  3961. Return: BX = 0000h
  3962. SeeAlso: AX=FB42h/BX=0001h,AX=FB42h/BX=1002h,AX=FB42h/BX=1003h
  3963. --------E-2FFB42BX1002-----------------------
  3964. INT 2F U - Borland RTM.EXE 1.0 - ???
  3965.     AX = FB42h
  3966.     BX = 1002h
  3967.     ???
  3968. Return: ???
  3969. SeeAlso: AX=FB42h/BX=1001h
  3970. --------E-2FFB42BX1003-----------------------
  3971. INT 2F U - Borland RTM.EXE 1.0 - ???
  3972.     AX = FB42h
  3973.     BX = 1003h
  3974.     ???
  3975. Return: ???
  3976. SeeAlso: AX=FB42h/BX=1001h
  3977. --------E-2FFB43-----------------------------
  3978. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - NULL FUNCTION
  3979.     AX = FB43h
  3980.     BX = subfunction (at least 0000h-000Eh)
  3981. Notes:    this function is only present in protected mode; it does nothing but
  3982.       an immediate IRET
  3983.     DPMILOAD.EXE itself calls various subfunctions:
  3984.         subfunction 0004h is called with CX=selector of ???, DI=selector
  3985.         of DPMILOAD data
  3986.         subfunction 0008h is called with CX=selector of DPMILOAD data
  3987. SeeAlso: AX=FB42h/BX=0001h
  3988. --------G-2FFB43BX0100-----------------------
  3989. INT 2F PU - Borland TDX - INSTALLATION CHECK
  3990.     AX = FB43h
  3991.     BX = 0100h
  3992. Return: BX = FB43h if loaded
  3993. Program: TDX is Borland's Turbo Debugger variant for DPMI programs
  3994. Note:    Borland Pascal 7 DPMI programs use this call to check whether they
  3995.       should install their own stack and general protection exception
  3996.       handlers, or allow TDX to handle those exceptions
  3997. --------a-2FFB64-----------------------------
  3998. INT 2F U - AutoBraille v1.1A - GET ???
  3999.     AX = FB64h
  4000. Return: AX = ??? (0006h seen)
  4001. Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  4002. --------E-2FFBA1BX0081-----------------------
  4003. INT 2F U - TKERNEL (Borland DOS extender) - INSTALLATION CHECK
  4004.     AX = FBA1h
  4005.     BX = 0081h
  4006.     ES:DI -> 16-byte buffer
  4007. Return: if installed, first four bytes of ES:DI buffer are "IABH"
  4008. Program: TKERNEL is a licensed version of AI Architects/Ergo's OS/x86.
  4009. Note:    TKERNEL was present only in Borland C++ 2.0; with version 3.0, the DOS
  4010.       extender was moved into DPMILOAD.
  4011. SeeAlso: AH=A1h,AX=F100h,AX=FBA1h/BX=0082h,AX=FBA1h/BX=0084h,INT 15/AX=BF02h 
  4012. SeeAlso: INT 21/AX=4403h"TKERNEL"
  4013. --------E-2FFBA1BX0082-----------------------
  4014. INT 2F U - TKERNEL (Borland DOS extender) - GET ENTRY POINT
  4015.     AX = FBA1h
  4016.     BX = 0082h
  4017.     ES:DI -> response buffer (see below)
  4018. Return: ES:DI buffer filled
  4019. SeeAlso: AX=FBA1h/BX=0081h,AX=FBA1h/BX=0084h
  4020.  
  4021. Format of response buffer:
  4022. Offset    Size    Description
  4023.  00h  4 BYTEs    signature "IABH"
  4024.  04h    DWORD    pointer to FAR extender entry point
  4025.  
  4026. Call entry point with:
  4027.     AX = function number
  4028.         0000h initialize???
  4029.         STACK:    WORD  ???
  4030.         Return: AX = status???
  4031.             STACK unchanged
  4032.         0001h get version???
  4033.         Return: AX = 0200h for v2.0.34
  4034.         0002h get ???
  4035.         Return: AX = ??? (011Eh or 0182h seen)
  4036.         0003h load protected-mode executable
  4037.         STACK:    DWORD -> ASCIZ filename of executable
  4038.             DWORD    ???
  4039.             DWORD -> program arguments (counted string plus CR)
  4040.             DWORD -> environment for protected-mode executable
  4041.                 (terminated with two consecutive NULs)
  4042.             DWORD -> WORD buffer for ???
  4043.         Return:    AX = status???
  4044.             STACK unchanged
  4045.         0004h get descriptor
  4046.         STACK:    WORD    selector for which to get descriptor
  4047.             WORD    segment number (when running in real mode)
  4048.             DWORD -> buffer for descriptor
  4049.         Return: CF clear if successful
  4050.                 buffer filled
  4051.             CF set on error
  4052.                 AX destroyed???
  4053.             STACK unchanged
  4054.         0005h ???
  4055.         STACK:    WORD    selector for ???
  4056.             WORD    subfunction number???
  4057.                 0000h run previously-loaded program???
  4058.                 0001h ??? (similar to 0000h)
  4059.                 0002h
  4060.                 0003h
  4061.                 0005h ??? (similar to 0000h and 0001h)
  4062.         Return: AX = status???
  4063.             STACK unchanged
  4064.         0006h ???
  4065.         STACK:    WORD ???
  4066.             DWORD -> WORD (call) max iterations of ???
  4067.                       (return) remaining iterations
  4068.         Return: AX = ???
  4069.             STACK unchanged
  4070.         0007h unused
  4071.         Return: AX = 0001h
  4072.         0008h unused
  4073.         Return: AX = 0001h
  4074.         0009h copy protected-mode memory into conventional memory
  4075.         STACK:    WORD    selector for source segment
  4076.             WORD    segment of source if in real mode???
  4077.             DWORD    offset of source
  4078.             WORD    number of bytes to copy
  4079.             DWORD -> low-memory destination
  4080.         Return: AX = status
  4081.             STACK unchanged
  4082.         000Ah copy conventional memory into protected-mode memory
  4083.         STACK:    WORD    selector for destination segment
  4084.             WORD    segment of destination if in real mode???
  4085.             DWORD    offset of destination
  4086.             WORD    number of bytes to copy
  4087.             DWORD -> low-memory source
  4088.         Return: AX = status
  4089.             STACK unchanged
  4090.         000Bh get ??? pointers
  4091.         STACK:    WORD desired pointer
  4092.                 0000h get ???
  4093.                 0002h get protected-mode CR3
  4094.                 0003h get 4K page table buffer pointer
  4095.                 else Return: DX:AX = FFFFh:FFFFh
  4096.         Return: DX:AX = requested pointer
  4097.             STACK unchanged
  4098.         000Ch set ??? pointers
  4099.         STACK:    WORD desired pointer
  4100.                 0000h set ???
  4101.                 0002h set protected-mode CR3
  4102.                 0003h set 4K page table buffer pointer
  4103.                 else ignore
  4104.             DWORD new value for pointer
  4105.         Return: STACK unchanged
  4106.         000Dh get ??? pointers
  4107.         STACK:    WORD desired pointer
  4108.                 0000h get ???
  4109.                 0001h get ???
  4110.                 0002h get ???
  4111.                 0003h get ???
  4112.                 0004h get ???
  4113.                 0005h get ???
  4114.                 0006h get ???
  4115.                 0007h get ???
  4116.                 else Return: DX:AX = FFFFh:FFFFh
  4117.         Return: DX:AX = desired pointer
  4118.             STACK unchanged
  4119.         000Eh set ??? pointer
  4120.         STACK:    WORD desired pointer
  4121.                 0000h set ???
  4122.                 0001h set ???
  4123.                 0002h set ???
  4124.                 0003h set ???
  4125.                 0004h set ???
  4126.                 0005h set ???
  4127.                 0006h set ???
  4128.                 0007h set ???
  4129.                 else Return: DX:AX = FFFFh:FFFFh
  4130.         Return: STACK unchanged
  4131.         000Fh get ???
  4132.         Return: AX = ??? (seen 0008h)
  4133.         0010h get ???
  4134.         Return: AX = ???
  4135.         0011h determine whether selector is valid
  4136.         STACK:    WORD    possible selector
  4137.         Return: AX = selector or 0000h if invalid
  4138.             STACK unchanged
  4139.         0012h get physical address
  4140.         STACK:    WORD    selector for desired segment
  4141.             WORD    segment number if in real mode
  4142.             DWORD    offset within segment
  4143.         Return: DX:AX = 32-bit physical address or 00000000h on error
  4144.             BX destroyed
  4145.             STACK unchanged
  4146.         0013h ???
  4147.         Note:    normally jumps to code for function 0012h
  4148.         0014h copy protected-mode memory to conventional memory, with ???
  4149.         STACK:    WORD    selector for source segment
  4150.             WORD    segment of source if in real mode???
  4151.             DWORD    offset of source
  4152.             WORD    number of bytes to copy
  4153.             DWORD -> low-memory destination
  4154.         Return: AX = status???
  4155.             STACK unchanged
  4156.         0015h copy conventional memory to protected-mode memory, with ???
  4157.         STACK:    WORD    selector for destination segment
  4158.             WORD    segment of destination if in real mode???
  4159.             DWORD    offset of destination
  4160.             WORD    number of bytes to copy
  4161.             DWORD -> low-memory source
  4162.         Return: AX = status???
  4163.             STACK unchanged
  4164.         0016h set ??? pointer
  4165.         STACK:    WORD    unused
  4166.             DWORD -> ??? or 0000h:0000h
  4167.         Return: AX = 0000h
  4168.             STACK unchanged
  4169.         0017h allocate real-mode procedure???
  4170.         STACK:    DWORD    ASCIZ name of procedure
  4171.             DWORD ???
  4172.             DWORD    address of subroutine to invoke
  4173.         Return: AX = status
  4174.                 0032h procedure by that name exists
  4175.                 0033h no more real-mode procedures available
  4176.             DX destroyed
  4177.             STACK unchanged
  4178.         0018h unused
  4179.         Return: AX = 0001h
  4180.         0019h get parameter block
  4181.         Return: DX:AX -> parameter block (format unknown at this time,
  4182.                 but 92h bytes)
  4183.                 (preceded by signature "!!PARAM-BLOCK!!")
  4184.         001Ah get ???
  4185.         Return: AX = ??? (0148h seen)
  4186.         001Bh free real-mode procedure???
  4187.         STACK:    DWORD -> ASCIZ name of procedure
  4188.         Return: ???
  4189.             STACK unchanged
  4190.         001Ch check whether packets from protected mode task pending
  4191.         Return: AX = 0001h if packets pending, 0000h if not
  4192.         001Dh set ???
  4193.         STACK:    DWORD ??? or 0000h:0000h
  4194.         Return: AX,BX destroyed
  4195.             STACK unchanged
  4196.         001Eh ???
  4197.         STACK:    WORD ??? (high byte ignored)
  4198.             DWORD -> data structure (see below)
  4199.         Return: AX,BX,CX,DX destroyed
  4200.             data structure updated
  4201.             STACK unchanged
  4202.         Format of data structure
  4203.         Offset    Size    Description
  4204.          00h  2 BYTEs    unused
  4205.          02h    WORD    ???
  4206.          04h    WORD    ???
  4207.          06h    WORD    ???
  4208.          08h  2 BYTEs    unused
  4209.          0Ah    WORD    ???
  4210.          0Ch    WORD    (call) ???
  4211.                 (return) offset of this data structure (BUG?)
  4212.         001Fh set ???
  4213.         STACK:    WORD ??? (set to 0001h if zero)
  4214.         Return: AX destroyed
  4215.             STACK unchanged
  4216.         0020h ???
  4217.         STACK:    DWORD -> ??? (8 bytes of data)
  4218.         Return: AX = ???
  4219.             STACK unchanged
  4220.         0021h ???
  4221.         STACK:    DWORD -> ??? (8 bytes of data)
  4222.             WORD    ???
  4223.             WORD    ???
  4224.         Return: AX = ???
  4225.             STACK unchanged
  4226.         0022h ???
  4227.         STACK:    DWORD -> ??? (8 bytes of data)
  4228.             DWORD -> 4-byte buffer for results
  4229.         Return: AX = ???
  4230.             STACK unchanged
  4231.         0023h ???
  4232.         STACK:    DWORD -> ??? (8 bytes of data)
  4233.         Return: AX = ???
  4234.             STACK unchanged
  4235.         0024h set ???
  4236.         STACK:    WORD ???
  4237.         Return: AX destroyed
  4238.             STACK unchanged
  4239.         0025h get ???
  4240.         Return: AX = ??? (value set with func 0024h)
  4241.         0026h BUG: jumps to hyperspace due to fencepost error
  4242.         FFFFh set DOS memory management functions
  4243.         BX:SI -> FAR routine for allocating DOS memory
  4244.             (called with AH=48h,BX=number of paragraphs to alloc;
  4245.              returns CF clear, AX=segment of allocated memory, or
  4246.                  CF set on error)
  4247.         CX:DI -> FAR routine for freeing DOS memory
  4248.             (called with AH=49h,ES=segment of block to free;
  4249.              returns CF set on error,AX=error code)
  4250.         Note: each of these pointers normally points at INT 21/RETF
  4251.         other Return: AX = 0001h
  4252. Note:    BX may be destroyed by any of the API calls
  4253. --------E-2FFBA1BX0084-----------------------
  4254. INT 2F U - TKERNEL (Borland DOS extender) - UNINSTALL
  4255.     AX = FBA1h
  4256.     BX = 0084h
  4257.     ES:DI -> response buffer (see below)
  4258. Return: ES:DI buffer filled
  4259. SeeAlso: AX=FBA1h/BX=0081h,AX=FBA1h/BX=0084h
  4260.  
  4261. Format of response buffer:
  4262. Offset    Size    Description
  4263.  00h  4 BYTEs    signature "IABH"
  4264.  04h    WORD    success indicator
  4265.         0001h failed (INT 2F hooked by another program)
  4266.         unchanged if successful
  4267.  06h    WORD    segment of ???
  4268.  08h    WORD    segment of ??? memory block to free if nonzero
  4269.  0Ah    WORD    segment of ??? memory block to free if nonzero
  4270. --------s-2FFBFBES0000-----------------------
  4271. INT 2F U - SoundBlaster speech driver - INSTALLATION CHECK
  4272.     AX = FBFBh
  4273.     ES = 0000h
  4274. Return: ES nonzero if installed
  4275.         ES:BX -> entry point data structure (see below)
  4276. SeeAlso: INT 80/BX=0000h,INT F3"SoundBlaster"
  4277.  
  4278. Format of entry point data structure:
  4279. Offset    Size    Description
  4280.  00h  3 BYTEs    signature "FB "
  4281.  03h    BYTE    driver major version number???
  4282.  04h    DWORD    speech driver entry point
  4283.  08h 24 BYTEs    ???
  4284.  20h  ? BYTEs    data buffer for calling speech driver
  4285.  
  4286. Call driver entry point with:
  4287.     AL = function
  4288.         07h speak a string
  4289.         data buffer (see above) contains:
  4290.             BYTE  length of string
  4291.               N BYTEs string to speak
  4292. --------N-2FFE00BX4454-----------------------
  4293. INT 2F - PC-NFS ??? - INSTALLATION CHECK
  4294.     AX = FE00h
  4295.     BX = 4454h ("DT")
  4296.     CX = 4B52h ("KR")
  4297.     DX = 4E4Dh ("NM")
  4298. Return: AL = FFh if installed
  4299.        BX = 524Eh ("RM")
  4300.        CX = 4D44h ("MD")
  4301.        DX = 544Bh ("TK")
  4302. Note:    DV/X 1.10 DVPCNFS.DVR searches AH=FEh,FFh,C0h-FDh for a valid response
  4303. SeeAlso: AX=FE08h
  4304. --------N-2FFE00BX4454-----------------------
  4305. INT 2F - PC-NFS ??? - INSTALLATION CHECK
  4306.     AX = FE00h
  4307.     BX = 4454h ("DT")
  4308.     CX = 4B52h ("KR")
  4309.     DX = 544Dh ("TM")
  4310. Return: AL = FFh if installed
  4311.        BX = 5254h ("RT")
  4312.        CX = 4D44h ("MD")
  4313.        DX = 544Bh ("TK")
  4314. Note:    DV/X 1.10 DVPCNFS.DVR searches AH=FEh,FFh,C0h-FDh for a valid response
  4315. SeeAlso: AX=FE08h
  4316. --------U-2FFE00DI4E55-----------------------
  4317. INT 2F U - NORTON UTILITIES 5.0+ TSRs - INSTALLATION CHECK/STATUS REPORT
  4318.     AX = FE00h
  4319.     DI = 4E55h ("NU")
  4320.     SI = TSR identifier
  4321.         4346h ("CF") NCACHE-F (v5) / NCACHE (v6.0+)
  4322.         4353h ("CS") NCACHE-S (v5 only)
  4323.         4443h ("DC") DISKREET
  4324.         444Dh ("DM") DISKMON
  4325.         4653h ("FS") FILESAVE (v5) / EP (v6.0+)
  4326. Return: SI = TSR reply
  4327.         lowercase version of SI on entry (i.e. SI OR 2020h)
  4328.     AH = status
  4329.         00h installed but disabled internally
  4330.         01h installed and enabled
  4331.     AL = status
  4332.         00h    NCACHE-x or DISKREET installed
  4333.         01h FILESAVE / EP / DISKMON v6 installed
  4334.         45h    DISKMON v5 installed
  4335.     BX = length of *.INI file (DISKMON and FILESAVE/EP only) (see below)
  4336.     CX = segment of resident portion
  4337.         FFFFh if completely loaded high (NCACHE)
  4338. ---FILESAVE/EP---
  4339.     DL = ??? (apparently always 00h)
  4340. ---DISKMON---
  4341.     DX = ??? (apparently always 1AE6h [v5] / 1B86h [v6])
  4342. Note:    the value returned in CX is incorrect for NCACHE 6.00
  4343. SeeAlso: AX=FE01h,AX=FE02h,AX=FE03h,AX=FE04h,AX=FE05h
  4344.  
  4345. Format of DISKMON.INI file:
  4346. Offset    Size    Description
  4347. -6Ch 108 BYTEs    (in memory copy only)
  4348.         list of filenames which are always protected:
  4349.           IBMBIO.COM/IBMDOS.COM, IO.SYS/MSDOS.SYS, TBIOS.SYS/TDOS.SYS,
  4350.           MIO.SYS/IO.BIN, COMMAND.COM
  4351.  00h    BYTE    ??? always 01h
  4352.  01h    BYTE    disk light (00h off, 01h on)
  4353.  02h    BYTE    disk protection (00h off, 01h on)
  4354.  03h    BYTE    protected areas
  4355.         01h system area
  4356.         02h files
  4357.         03h system area and files
  4358.         04h entire disk
  4359.  04h    BYTE    floppy access (00h not allowed, 01h allowed)
  4360.  05h 27 BYTEs    filename extension list (9 entries)
  4361.         (lowercase, blank padded or = 000000h)
  4362.  20h 240 BYTEs    filename list (20 entries)
  4363.         (lowercase, name and extension blank padded, with '.')
  4364. Note:    CX:0508h -> copy in installed TSR (v5)
  4365.     CX:052Fh -> copy in installed TSR (v6)
  4366.  
  4367. Format of FILESAVE.INI / EP.INI file:
  4368. Offset    Size    Description
  4369.  00h 26 BITs    drive list (bit set: file protection on, cleared: off):
  4370.  00h    BYTE    drives    A: - H:
  4371.  01h    BYTE    drives    I: - P:
  4372.  02h    BYTE    drives    Q: - X:
  4373.  03h    BYTE    drives    Y: - Z:
  4374.  04h    BYTE    which files to protect
  4375.         00h all files
  4376.         01h all files with extension in list
  4377.         02h all files except those with extension in list
  4378.  05h 27 BYTEs    filename extension list (9 entries, uppercase, ASCIZ)
  4379.  20h    BYTE    include files with archive bit clear (00h no, 01h yes)
  4380.  21h    WORD    number of days after which files are purged (0 = never)
  4381.  23h    WORD    max kilobytes of erased file space to hold (0 = all)
  4382. Note:    CX:03D2h -> copy in installed TSR (v5.0)
  4383.     CX:03F5h -> copy in installed TSR (v6.0)
  4384. --------U-2FFE01DI4E55-----------------------
  4385. INT 2F U - NORTON UTILITIES 5.0+ TSRs - ENABLE
  4386.     AX = FE01h
  4387.     DI = 4E55h ("NU")
  4388.     SI = TSR identifier (see AX=FE00h)
  4389. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h)
  4390.     AX = status
  4391.         0002h successful (DISKMON, FILESAVE, EP)
  4392.         FE00h successful (NCACHE-x, DISKREET)
  4393. Notes:    if the enable/disable calls are used on DISKMON or NCACHE-x, the status
  4394.       report generated by the programs still indicates the previous state,
  4395.       and DISKMON.INI is not updated
  4396.     apparently has no effect on DISKREET
  4397. SeeAlso: AX=FE00h,AX=FE02h
  4398. --------U-2FFE02DI4E55-----------------------
  4399. INT 2F U - NORTON UTILITIES 5.0+ TSRs - DISABLE
  4400.     AX = FE02h
  4401.     DI = 4E55h ("NU")
  4402.     SI = TSR identifier (see AX=FE00h)
  4403. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h)
  4404.     AX = status
  4405.         0004h successful (DISKMON, FILESAVE)
  4406.         FE00h successful (NCACHE-x, DISKREET)
  4407. Notes:    (see also AX=FE01h)
  4408.     this function appears to be unsafe, as the cache buffers are not
  4409.       flushed
  4410. SeeAlso: AX=FE00h,AX=FE01h
  4411. --------U-2FFE03DI4E55-----------------------
  4412. INT 2F U - NORTON UTILITIES 5.0+ TSRs - FLUSH BUFFERS
  4413.     AX = FE03h
  4414.     DI = 4E55h ("NU")
  4415.     SI = TSR identifier (see AX=FE00h)
  4416. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h)
  4417.     AX = status
  4418.         0006h successful???
  4419. Notes:    only supported by DISKMON, FILESAVE, and NCACHE-x
  4420.     useful for flushing NCACHE before rebooting
  4421. SeeAlso: AX=FE00h,AX=FE10h
  4422. --------U-2FFE04DI4E55-----------------------
  4423. INT 2F U - NORTON UTILITIES 5.0+ DISKMON, FILESAVE / EP - internal - ???
  4424.     AX = FE04h
  4425.     DI = 4E55h ("NU")
  4426.     SI = TSR identifier (see AX=FE00h)
  4427. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI or 2020h)
  4428.     AX = status
  4429.         0008h successful???
  4430. SeeAlso: AX=FE00h
  4431. --------U-2FFE05DI4E55-----------------------
  4432. INT 2F U - NORTON UTILITIES 5.0+ DISKMON, FILESAVE / EP - internal - ???
  4433.     AX = FE05h
  4434.     DI = 4E55h ("NU")
  4435.     SI = TSR identifier (see AX=FE00h)
  4436. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI or 2020h)
  4437.     AX = status
  4438.         000Ah successful???
  4439. Note:    reportedly dangerous
  4440. SeeAlso: AX=FE00h
  4441. --------N-2FFE08-----------------------------
  4442. INT 2F - PC-NFS ??? - GET ???
  4443.     AX = FE08h
  4444. Return: ES:BX -> ???
  4445. Notes:    DV/X 1.10 DVPCNFS.DVR searches AH=FEh,FFh,C0h-FDh for a valid response
  4446.     both the driver responding to AX=FE00h/DX=4E4Dh and the one responding
  4447.       to AX=FE00h/DX=544Dh support this function
  4448. SeeAlso: AX=FE00h/BX=4454h
  4449. --------U-2FFE10DI4E55-----------------------
  4450. INT 2F U - NORTON UTILITIES 6.0 NCACHE - REBOOT
  4451.     AX = FE10h
  4452.     DI = 4E55h ("NU")
  4453.     SI = TSR identifier (see AX=FE00h)
  4454. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI or 2020h)
  4455.     AX = status
  4456. Note:    probably used to flush NCACHE buffers and reboot when Ctrl-Alt-Del is
  4457.       detected
  4458. SeeAlso: AX=FE03h
  4459. --------N-2FFF00-----------------------------
  4460. INT 2F - Topware Network Operating System - INSTALLATION CHECK
  4461.     AX = FF00h
  4462. Return: AL = 00h not installed, OK to install
  4463.        = 01h not installed, not OK to install
  4464.        = FFh installed
  4465. SeeAlso: AX=FF01h,INT 21/AH=FFh"Topware",INT 7A"Topware"
  4466. --------N-2FFF01-----------------------------
  4467. INT 2F - Topware Network Operating System - GET VERSION
  4468.     AX = FF01h
  4469. Return: AX = version
  4470. SeeAlso: AX=FF00h
  4471. --------D-30---------------------------------
  4472. INT 30 - (NOT A VECTOR!) - DOS 1+ - FAR JMP instruction for CP/M-style calls
  4473.    the CALL 5 entry point does a FAR jump to here
  4474. Note:    under DOS 2+, the instruction at PSP:0005 points two bytes too low in
  4475.       memory
  4476. SeeAlso: INT 21/AH=26h
  4477. --------D-31---------------------------------
  4478. INT 31 - overwritten by CP/M jump instruction in INT 30
  4479. --------v-31---------------------------------
  4480. INT 31 - VIRUS - "Vacsina" series - INSTALLATION CHECK (NOT A VECTOR!)
  4481. Note:    if one of the Vacsina viruses is resident, the low byte of this
  4482.       interrupt still contains the last byte of the INT 30 CP/M JMP
  4483.       instruction, but the remaining three bytes are 7Fh 39h followed
  4484.       by the Vacsina version number
  4485. SeeAlso: INT 21/AX=FFFFh"VIRUS",INT 32"VIRUS"
  4486. --------E-310000-----------------------------
  4487. INT 31 P - DPMI 0.9+ - ALLOCATE LDT DESCRIPTORS
  4488.     AX = 0000h
  4489.     CX = number of descriptors to allocate
  4490. Return: CF clear if successful
  4491.         AX = base selector
  4492.     CF set on error
  4493.         AX = error code (DPMI 1.0+)
  4494.         0000h-7FFFh DOS error passed through by DPMI
  4495.         8001h unsupported function
  4496.         8002h object in wrong state for function
  4497.         8003h system integrity would be endangered
  4498.         8004h deadlock detected
  4499.         8005h pending serialization request cancelled
  4500.         8010h out of DPMI internal resources
  4501.         8011h descriptor unavailable
  4502.         8012h linear memory unavailable
  4503.         8013h physical memory unavailable
  4504.         8014h backing store unavailable
  4505.         8015h callback unavailable
  4506.         8016h handle unavailable
  4507.         8017h maximum lock count exceeded
  4508.         8018h shared memory already serialized exclusively by another
  4509.         8019h shared memory already serialized shared by another client
  4510.         8021h invalid value for numeric or flag parameter
  4511.         8022h invalid segment selector
  4512.         8023h invalid handle
  4513.         8024h invalid callback
  4514.         8025h invalid linear address
  4515.         8026h request not supported by hardware
  4516. Notes:    DPMI is the DOS Protected-Mode Interface
  4517.     the base and limit of the returned descriptors will be 0, and the type
  4518.       will be "data"
  4519.     add the value returned by INT 31/AX=0003h to move to subsequent
  4520.       descriptors if multiple descriptors were allocated
  4521.     not supported by MS Windows 3.0 in Standard mode
  4522. SeeAlso: AX=0001h,AX=000Dh,INT 21/AX=3501h
  4523. --------E-310001-----------------------------
  4524. INT 31 P - DPMI 0.9+ - FREE LDT DESCRIPTOR
  4525.     AX = 0001h
  4526.     BX = selector to free
  4527. Return: CF clear if successful
  4528.     CF set on error
  4529.         AX = error code (DPMI 1.0+) (8022h) (see AX=0000h)
  4530. Notes:    only one descriptor is freed per call
  4531.     the program's initial CS, DS, and SS descriptors may be freed
  4532.     (DPMI 1.0+) any segment registers containing the freed selector are
  4533.       set to 0000h
  4534.     not supported by MS Windows 3.0 in Standard mode
  4535. SeeAlso: AX=0000h,AX=000Ah,AX=000Dh,INT 21/AX=3502h
  4536. --------E-310002-----------------------------
  4537. INT 31 P - DPMI 0.9+ - SEGMENT TO DESCRIPTOR
  4538.     AX = 0002h
  4539.     BX = real mode segment
  4540. Return: CF clear if successful
  4541.         AX = selector corresponding to real mode segment (64K limit)
  4542.     CF set on error
  4543.         AX = error code (DPMI 1.0+) (8011h) (see AX=0000h)
  4544. Notes:    multiple calls for the same real mode segment return the same selector
  4545.     the returned descriptor can never be modified or freed
  4546.     not supported by MS Windows 3.0 in Standard mode
  4547. --------E-310003-----------------------------
  4548. INT 31 P - DPMI 0.9+ - GET NEXT SELECTOR INCREMENT VALUE
  4549.     AX = 0003h
  4550. Return: CF clear
  4551.         AX = value to add to get next sequential selector
  4552. Notes:    the increment will be a power of two
  4553.     not supported by MS Windows 3.0 in Standard mode
  4554. SeeAlso: AX=0000h
  4555. --------E-310004-----------------------------
  4556. INT 31 P - DPMI 0.9+ - LOCK SELECTOR
  4557.     AX = 0004h
  4558.     BX = selector to lock (prevent paging)
  4559. Return: ???
  4560. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  4561.       specification, this function is called by MS Windows TASKMAN,
  4562.       PROGMAN, and KERNEL
  4563. SeeAlso: AX=0005h,AX=0600h
  4564. --------E-310005-----------------------------
  4565. INT 31 P - DPMI 0.9+ - UNLOCK SELECTOR
  4566.     AX = 0005h
  4567.     BX = selector to unlock (permit paging)
  4568. Return: ???
  4569. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  4570.       specification, this function is called by MS Windows TASKMAN,
  4571.       PROGMAN, and KERNEL
  4572. SeeAlso: AX=0004h,AX=0601h
  4573. --------E-310006-----------------------------
  4574. INT 31 P - DPMI 0.9+ - GET SEGMENT BASE ADDRESS
  4575.     AX = 0006h
  4576.     BX = selector
  4577. Return: CF clear if successful
  4578.         CX:DX = linear base address of segment
  4579.     CF set on error
  4580.         AX = error code (DPMI 1.0+) (8022h) (see AX=0000h)
  4581. Note:    not supported by MS Windows 3.0 in Standard mode
  4582. SeeAlso: AX=0007h,INT 21/AX=3504h
  4583. --------E-310007-----------------------------
  4584. INT 31 P - DPMI 0.9+ - SET SEGMENT BASE ADDRESS
  4585.     AX = 0007h
  4586.     BX = selector
  4587.     CX:DX = linear base address
  4588. Return: CF clear if successful
  4589.     CF set on error
  4590.         AX = error code (DPMI 1.0+) (8022h,8025h) (see AX=0000h)
  4591. Notes:    only modify descriptors allocated with INT 31/AX=0000h
  4592.     only the low 24 bits of the address will be used by 16-bit DPMI
  4593.       implementations even on a 386 or higher
  4594.     DPMI 1.0+ automatically reloads any segment registers containing the
  4595.       selector being modified
  4596.     not supported by MS Windows 3.0 in Standard mode
  4597. SeeAlso: AX=0006h,AX=0008h,AX=0009h,AX=000Ch,INT 21/AX=3503h
  4598. SeeAlso: INT 21/AH=E9h"OS/286"
  4599. --------E-310008-----------------------------
  4600. INT 31 P - DPMI 0.9+ - SET SEGMENT LIMIT
  4601.     AX = 0008h
  4602.     BX = selector
  4603.     CX:DX = segment limit
  4604. Return: CF clear if successful
  4605.     CF set on error
  4606.         AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see AX=0000h)
  4607. Notes:    CX must be zero for 16-bit DPMI implementations
  4608.     limits greater than 1MB must be page aligned (low 12 bits set)
  4609.     only modify descriptors allocated with INT 31/AX=0000h
  4610.     DPMI 1.0+ automatically reloads any segment registers containing the
  4611.       selector being modified
  4612.     not supported by MS Windows 3.0 in Standard mode
  4613. SeeAlso: AX=0007h,AX=0009h,AX=000Ch,INT 21/AX=3505h,INT 21/AH=E9h"OS/286"
  4614. --------E-310009-----------------------------
  4615. INT 31 P - DPMI 0.9+ - SET DESCRIPTOR ACCESS RIGHTS
  4616.     AX = 0009h
  4617.     BX = selector
  4618.     CL = access rights/type byte
  4619.     CH = 80386 extended rights/type byte (32-bit DPMI implementations only)
  4620. Return: CF clear if successful
  4621.     CF set on error
  4622.         AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see AX=0000h)
  4623. Notes:    if the Present bit is clear, CL bits 0-3 may have any value
  4624.     DPMI 1.0+ automatically reloads any segment registers containing the
  4625.       selector being modified
  4626.     not supported by MS Windows 3.0 in Standard mode
  4627. SeeAlso: AX=0007h,AX=0008h,AX=000Ch,INT 21/AX=2514h
  4628. --------E-31000A-----------------------------
  4629. INT 31 P - DPMI 0.9+ - CREATE ALIAS DESCRIPTOR
  4630.     AX = 000Ah
  4631.     BX = selector
  4632. Return: CF clear if successful
  4633.         AX = new data selector
  4634.     CF set on error
  4635.         AX = error code (DPMI 1.0+) (8011h,8022h) (see AX=0000h)
  4636. Notes:    fails if selector in BX is not a code segment or is invalid
  4637.     use INT 31/AX=0001h to free new selector
  4638.     future changes to the original selector will not be reflected in the
  4639.       returned alias selector
  4640.     not supported by MS Windows 3.0 in Standard mode
  4641. SeeAlso: AX=0001h
  4642. --------E-31000B-----------------------------
  4643. INT 31 P - DPMI 0.9+ - GET DESCRIPTOR
  4644.     AX = 000Bh
  4645.     BX = LDT selector
  4646.     ES:(E)DI -> 8-byte buffer for copy of descriptor
  4647. Return: CF clear if successful
  4648.         buffer filled
  4649.     CF set on error
  4650.         AX = error code (DPMI 1.0+) (8022h) (see AX=0000h)
  4651. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  4652.     not supported by MS Windows 3.0 in Standard mode
  4653. SeeAlso: AX=000Ch
  4654. --------E-31000C-----------------------------
  4655. INT 31 P - DPMI 0.9+ - SET DESCRIPTOR
  4656.     AX = 000Ch
  4657.     BX = LDT selector
  4658.     ES:(E)DI -> 8-byte buffer containing descriptor
  4659. Return:    CF clear if successful
  4660.     CF set on error
  4661.         AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see AX=0000h)
  4662. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  4663.     only modify descriptors allocated with INT 31/AX=0000h
  4664.     DPMI 1.0+ automatically reloads any segment registers containing the
  4665.       selector being modified
  4666.     not supported by MS Windows 3.0 in Standard mode
  4667. SeeAlso: AX=000Bh
  4668. --------E-31000D-----------------------------
  4669. INT 31 P - DPMI 0.9+ - ALLOCATE SPECIFIC LDT DESCRIPTOR
  4670.     AX = 000Dh
  4671.     BX = LDT selector
  4672. Return: CF clear if successful
  4673.         descriptor allocated
  4674.     CF set on error
  4675.         AX = error code (DPMI 1.0+) (8011h,8022h) (see AX=0000h)
  4676. Notes:    free descriptor with INT 31/AX=0001h
  4677.     the first 16 descriptors (04h-7Ch) are reserved for this function, but
  4678.       some may already be in use by other applications under DPMI 0.9;
  4679.       DPMI 1.0 guarantees 16 descriptors per client
  4680.     not supported by MS Windows 3.0 in Standard mode
  4681. SeeAlso: AX=0000h,AX=0001h
  4682. --------E-31000E-----------------------------
  4683. INT 31 P - DPMI 1.0+ - GET MULTIPLE DESCRIPTORS
  4684.     AX = 000Eh
  4685.     CX = number of descriptors to copy
  4686.     ES:(E)DI -> descriptor buffer (see below)
  4687. Return: CF clear if successful
  4688.         descriptors copied
  4689.     CF set on error
  4690.         AX = error code (8022h) (see AX=0000h)
  4691.         CX = number of descriptors successfully copied
  4692. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  4693.     if the function fails, the first CX descriptors are valid; the
  4694.       remainder are not modified
  4695. SeeAlso: AX=000Bh,AX=000Fh
  4696.  
  4697. Format of descriptor buffer entry (one per descriptor to get):
  4698. Offset    Size    Description
  4699.  00h    WORD    selector (set by client)
  4700.  02h    QWORD    descriptor (set by host)
  4701. --------E-31000F-----------------------------
  4702. INT 31 P - DPMI 1.0+ - SET MULTIPLE DESCRIPTORS
  4703.     AX = 000Fh
  4704.     CX = number of descriptors to copy
  4705.     ES:(E)DI -> descriptor buffer (see below)
  4706. Return: CF clear if successful
  4707.         descriptors copied
  4708.     CF set on error
  4709.         AX = error code (8021h,8022h,8025h) (see AX=0000h)
  4710.         CX = number of descriptors successfully copied
  4711. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  4712.     if the function fails, the first CX descriptors are valid; the
  4713.       remainder are not modified
  4714.     DPMI 1.0+ automatically reloads any segment registers containing a
  4715.       selector being modified
  4716. SeeAlso: AX=000Ch,AX=000Eh
  4717.  
  4718. Format of descriptor buffer entry (one per descriptor to set):
  4719. Offset    Size    Description
  4720.  00h    WORD    selector
  4721.  02h    QWORD    descriptor
  4722. --------E-310100-----------------------------
  4723. INT 31 P - DPMI 0.9+ - ALLOCATE DOS MEMORY BLOCK
  4724.     AX = 0100h
  4725.     BX = number of paragraphs to allocate
  4726. Return: CF clear if successful
  4727.         AX = real mode segment of allocated block
  4728.         DX = first selector for allocated block
  4729.     CF set on error
  4730.         AX = DOS error code (07h,08h) (see INT 21/AH=59h)
  4731.          (DPMI 1.0+) DPMI error code (8011h) (see AX=0000h)
  4732.         BX = size (in paragraphs) of largest available block
  4733. Notes:    multiple contiguous selectors are allocated for blocks of more than 64K
  4734.       if the caller is a 16-bit program
  4735.     never modify or deallocate returned descriptors
  4736.     not supported by MS Windows 3.0 in Standard mode
  4737. SeeAlso: AX=0101h,AX=0501h
  4738. --------E-310101-----------------------------
  4739. INT 31 P - DPMI 0.9+ - FREE DOS MEMORY BLOCK
  4740.     AX = 0101h
  4741.     DX = selector of block
  4742. Return: CF set if successful
  4743.     CF set on error
  4744.         AX = DOS error code (07h,09h) (see INT 21/AH=59h)
  4745. Notes:    all descriptors allocated for the block are automatically freed
  4746.     DPMI 1.0+ automatically zeros any segment registers containing a
  4747.       selector freed by this function
  4748.     not supported by MS Windows 3.0 in Standard mode
  4749. SeeAlso: AX=0100h,AX=0102h,AX=0502h
  4750. --------E-310102-----------------------------
  4751. INT 31 P - DPMI 0.9+ - RESIZE DOS MEMORY BLOCK
  4752.     AX = 0102h
  4753.     BX = new block size in paragraphs
  4754.     DX = selector of block
  4755. Return: CF clear if successful
  4756.     CF set on error
  4757.         AX = DOS error code (07h,08h,09h) (see INT 21/AH=59h)
  4758.          (DPMI 1.0+) DPMI error code (8011h,8022h) (see AX=0000h)
  4759.         BX = maximum block size (in paragraphs) possible
  4760. Notes:    increasing the size of a block past a 64K boundary will fail if the
  4761.       next descriptor in the LDT is already in use
  4762.     shrinking a block past a 64K boundary will cause some selectors to be
  4763.       freed; DPMI 1.0+ automatically zeros any segment registers containing
  4764.       a selector freed by this function
  4765.     not supported by MS Windows 3.0 in Standard mode
  4766. SeeAlso: AX=0100h
  4767. --------E-310200-----------------------------
  4768. INT 31 P - DPMI 0.9+ - GET REAL MODE INTERRUPT VECTOR
  4769.     AX = 0200h
  4770.     BL = interrupt number
  4771. Return: CF clear
  4772.     CX:DX = segment:offset of real mode interrupt handler
  4773. Note:    the DPMI implementation is required to support all 256 vectors
  4774. SeeAlso: AX=0201h,AX=0204h,INT 21/AX=2503h
  4775. --------E-310201-----------------------------
  4776. INT 31 P - DPMI 0.9+ - SET REAL MODE INTERRUPT VECTOR
  4777.     AX = 0201h
  4778.     BL = interrupt number
  4779.     CX:DX = segment:offset of real mode handler
  4780. Return: CF clear
  4781. Note:    all memory that may be touched by a hardware interrupt handler must be
  4782.       locked down with INT 31/AX=0600h    
  4783. SeeAlso: AX=0200h,AX=0205h,AX=0600h,INT 21/AX=2505h
  4784. --------E-310202-----------------------------
  4785. INT 31 P - DPMI 0.9+ - GET PROCESSOR EXCEPTION HANDLER VECTOR
  4786.     AX = 0202h
  4787.     BL = exception number (00h-1Fh)
  4788. Return:    CF clear if successful
  4789.         CX:(E)DX = selector:offset of handler
  4790.     CF set on error
  4791.         AX = error code (DPMI 1.0+) (8021h) (see AX=0000h)
  4792. Notes:    16-bit programs receive the pointer in CX:DX, 32-bit programs in CX:EDX
  4793.     DPMI 1.0+ supports this function only for backward compatibility; use
  4794.        AX=0210h or AX=0211h instead
  4795.     not supported by MS Windows 3.0 in Standard mode
  4796. SeeAlso: AX=0203h,AX=0210h,AX=0211h,INT 2F/AX=FB42h/BX=0021h
  4797. --------E-310203-----------------------------
  4798. INT 31 P - DPMI 0.9+ - SET PROCESSOR EXCEPTION HANDLER VECTOR
  4799.     AX = 0203h
  4800.     BL = exception number (00h-1Fh)
  4801.     CX:(E)DX = selector:offset of handler
  4802. Return: CF clear if successful
  4803.     CF set on error
  4804.         AX = error code (DPMI 1.0+) (8021h,8022h) (see AX=0000h)
  4805. Notes:    32-bit programs must supply an offset in EDX and use a 32-bit interrupt
  4806.       stack frame on chaining to the next exception handler
  4807.     the handler should return using a FAR return
  4808.     all fault stack frames contain an error code, but it is only valid for
  4809.       exceptions 08h and 0Ah-0Eh
  4810.     handlers will only be called if the exception occurs in protected mode,
  4811.       and the DPMI host does not transparently handle the exception
  4812.     the handler may change certain values on the stack frame (see below)
  4813.     DPMI 1.0+ supports this function only for backward compatibility; use
  4814.        AX=0212h or AX=0213h instead
  4815.     not supported by MS Windows 3.0 in Standard mode
  4816. SeeAlso: AX=0202h,AX=0212h,AX=0213h,INT 2F/AX=FB42h/BX=0022h
  4817.  
  4818. Format of stack frame for 16-bit programs: (offset from SS:SP)
  4819. Offset    Size    Description
  4820.  00h    DWORD    return CS:IP (do not change)
  4821.  04h    WORD    error code
  4822.  06h    DWORD    CS:IP of exception
  4823.  0Ah    WORD    flags
  4824.  0Ch    DWORD    SS:SP
  4825.  
  4826. Format of stack frame for 32-bit programs: (offset from SS:ESP)
  4827. Offset    Size    Description
  4828.  00h    DWORD    return EIP (do not change)
  4829.  04h    WORD    return CS selector (do not change)
  4830.  06h    WORD    reserved (do not change)
  4831.  08h    DWORD    error code
  4832.  0Ch    DWORD    EIP of exception
  4833.  10h    WORD    CS selector of exception
  4834.  12h    WORD    reserved (do not change)
  4835.  14h    DWORD    EFLAGS
  4836.  18h    DWORD    ESP
  4837.  1Ch    WORD    SS
  4838.  1Eh    WORD    reserved (do not change)
  4839. --------E-310204-----------------------------
  4840. INT 31 P - DPMI 0.9+ - GET PROTECTED MODE INTERRUPT VECTOR
  4841.     AX = 0204h
  4842.     BL = interrupt number
  4843. Return:    CF clear
  4844.     CX:(E)DX = selector:offset of handler
  4845. Notes:    16-bit programs use CX:DX, 32-bit programs use CX:EDX
  4846.     DPMI implementations are required to support all 256 vectors
  4847.     not supported by MS Windows 3.0 in Standard mode
  4848. SeeAlso: AX=0200h,AX=0205h,INT 21/AX=2502h,INT 2F/AX=FB42h/BX=0024h
  4849. --------E-310205-----------------------------
  4850. INT 31 P - DPMI 0.9+ - SET PROTECTED MODE INTERRUPT VECTOR
  4851.     AX = 0205h
  4852.     BL = interrupt number
  4853.     CX:(E)DX = selector:offset of handler
  4854. Return: CF clear if successful
  4855.     CF set on error
  4856.         AX = error code (DPMI 1.0+) (8022h) (see AX=0000h)
  4857. Notes:    16-bit programs use CX:DX, 32-bit programs use CX:EDX
  4858.     32-bit programs must use a 32-bit interrupt stack frame when chaining
  4859.       to the next handler
  4860.     DPMI implementations are required to support all 256 vectors
  4861.     hardware interrupts are reflected to the virtual machine's primary
  4862.       client, software interrupts to the current client
  4863.     not supported by MS Windows 3.0 in Standard mode
  4864. SeeAlso: AX=0201h,AX=0204h,INT 21/AX=2504h,INT 2F/AX=FB42h/BX=0025h
  4865. --------E-310210-----------------------------
  4866. INT 31 P - DPMI 1.0+ - GET PROTECTED MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  4867.     AX = 0210h
  4868.     BL = exception number (00h-1Fh)
  4869. Return: CF clear if successful
  4870.         CX:(EDX) = selector:offset of exception handler
  4871.     CF set on error
  4872.         AX = error code (8021h) (see AX=0000h)
  4873. Note:    DPMI host reflects exception to current client's handler
  4874. SeeAlso: AX=0202h,AX=0211h,AX=0212h
  4875. --------E-310211-----------------------------
  4876. INT 31 P - DPMI 1.0+ - GET REAL MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  4877.     AX = 0211h
  4878.     BL = exception number (00h-1Fh)
  4879. Return: CF clear if successful
  4880.         CX:(EDX) = selector:offset of exception handler
  4881.     CF set on error
  4882.         AX = error code (8021h) (see AX=0000h)
  4883. Notes:    returns address of protected-mode handler for real-mode exception
  4884.     DPMI host performs a switch to protected mode, reflects the exception
  4885.       to the virtual machine's primary client, and returns to real mode
  4886.       on the handler's completion
  4887. SeeAlso: AX=0202h,AX=0210h,AX=0213h
  4888. --------E-310212-----------------------------
  4889. INT 31 P - DPMI 1.0+ - SET PROTECTED MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  4890.     AX = 0212h
  4891.     BL = exception or fault number (00h-1Fh)
  4892.     CX:(E)DX = exception handler selector:offset
  4893. Return: CF clear if successful
  4894.     CF set on error
  4895.         AX = error code (8021h,8022h) (see AX=0000h)
  4896. Note:    DPMI host sends exception to current client's handler
  4897. SeeAlso: AX=0203h,AX=0210h,AX=0213h
  4898. --------E-310213-----------------------------
  4899. INT 31 P - DPMI 1.0+ - SET REAL MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  4900.     AX = 0213h
  4901.     BL = exception or fault number (00h-1Fh)
  4902.     CX:(E)DX = exception handler selector:offset
  4903. Return: CF clear if successful
  4904.     CF set on error
  4905.         AX = error code (8021h,8022h) (see AX=0000h)
  4906. Notes:    specifies address of protected-mode handler for real-mode exception
  4907.     DPMI host performs a switch to protected mode, reflects the exception
  4908.       to the virtual machine's primary client, and returns to real mode
  4909.       on the handler's completion
  4910. SeeAlso: AX=0203h,AX=0211h,AX=0212h
  4911. --------E-310300-----------------------------
  4912. INT 31 P - DPMI 0.9+ - SIMULATE REAL MODE INTERRUPT
  4913.     AX = 0300h
  4914.     BL = interrupt number
  4915.     BH = flags
  4916.         bit 0: reset the interrupt controller and A20 line (DPMI 0.9)
  4917.            reserved, must be 0 (DPMI 1.0+)
  4918.         others must be 0
  4919.     CX = number of words to copy from protected mode to real mode stack
  4920.     ES:(E)DI = selector:offset of real mode call structure (see below)
  4921. Return:    CF clear if successful
  4922.         real mode call structure modified (all fields except SS:SP, CS:IP
  4923.           filled with return values from real mode interrupt)
  4924.     CF set on error
  4925.         AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see AX=0000h)
  4926.     protected mode stack unchanged
  4927. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  4928.     CS:IP in the real mode call structure is ignored for this call,
  4929.       instead, the indicated interrupt vector is used for the address
  4930.     the flags in the call structure are pushed on the real mode stack to
  4931.       form an interrupt stack frame, and the trace and interrupt flags are
  4932.       clear on entry to the handler
  4933.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  4934.     the real mode handler must return with the stack in the same state as
  4935.       it was on being called
  4936. SeeAlso: AX=0302h,INT 21/AX=2511h,INT 21/AH=E3h"OS/286"
  4937. SeeAlso: INT 2F/AX=FB42h/BX=000Dh
  4938.  
  4939. Format of real mode call structure:
  4940. Offset    Size    Description
  4941.  00h    DWORD    EDI
  4942.  04h    DWORD    ESI
  4943.  08h    DWORD    EBP
  4944.  0Ch    DWORD    reserved (00h)
  4945.  10h    DWORD    EBX
  4946.  14h    DWORD    EDX
  4947.  18h    DWORD    ECX
  4948.  1Ch    DWORD    EAX
  4949.  20h    WORD    flags
  4950.  22h    WORD    ES
  4951.  24h    WORD    DS
  4952.  26h    WORD    FS
  4953.  28h    WORD    GS
  4954.  2Ah    WORD    IP
  4955.  2Ch    WORD    CS
  4956.  2Eh    WORD    SP
  4957.  30h    WORD    SS
  4958. --------E-310301-----------------------------
  4959. INT 31 P - DPMI 0.9+ - CALL REAL MODE PROCEDURE WITH FAR RETURN FRAME
  4960.     AX = 0301h
  4961.     BH = flags
  4962.         bit 0: reset the interrupt controller and A20 line (DPMI 0.9)
  4963.            reserved, must be 0 (DPMI 1.0+)
  4964.         others must be 0
  4965.     CX = number of words to copy from protected mode to real mode stack
  4966.     ES:DI / ES:EDI = selector:offset of real mode call structure
  4967.             (see INT 31/AX=0300h)
  4968. Return: CF clear if successful
  4969.         real mode call structure modified (all fields except SS:SP, CS:IP
  4970.           filled with return values from real mode interrupt)
  4971.     CF set on error
  4972.         AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see AX=0000h)
  4973.     protected mode stack unchanged
  4974. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  4975.     the real mode procedure must exit with a FAR return
  4976.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  4977.     the real mode handler must return with the stack in the same state as
  4978.       it was on being called
  4979. SeeAlso: AX=0300h,AX=0302h,INT 21/AX=250Eh,INT 21/AH=E1h"OS/286"
  4980. --------E-310302-----------------------------
  4981. INT 31 P - DPMI 0.9+ - CALL REAL MODE PROCEDURE WITH IRET FRAME
  4982.     AX = 0302h
  4983.     BH = flags
  4984.         bit 0: reset the interrupt controller and A20 line (DPMI 0.9)
  4985.            reserved, must be 0 (DPMI 1.0+)
  4986.         others must be 0
  4987.     CX = number of words to copy from protected mode to real mode stack
  4988.     ES:DI / ES:EDI = selector:offset of real mode call structure
  4989.             (see INT 31/AX=0300h)
  4990. Return:    CF clear if successful
  4991.         real mode call structure modified (all fields except SS:SP, CS:IP
  4992.           filled with return values from real mode interrupt)
  4993.     CF set on error
  4994.         AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see AX=0000h)
  4995.     protected mode stack unchanged
  4996. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  4997.     the flags in the call structure are pushed on the real mode stack to
  4998.       form an interrupt stack frame, and the trace and interrupt flags are
  4999.       clear on entry to the handler
  5000.     the real mode procedure must exit with an IRET
  5001.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  5002.     the real mode handler must return with the stack in the same state as
  5003.       it was on being called
  5004. SeeAlso: AX=0300h
  5005. --------E-310303-----------------------------
  5006. INT 31 P - DPMI 0.9+ - ALLOCATE REAL MODE CALLBACK ADDRESS
  5007.     AX = 0303h
  5008.     DS:SI / DS:ESI = selector:offset of procedure to call
  5009.     ES:DI / ES:EDI = selector:offset of real mode call structure
  5010.             (see AX=0300h)
  5011. Return: CF clear if successful
  5012.         CX:DX = segment:offset of real mode call address
  5013.     CF set on error
  5014.         AX = error code (DPMI 1.0+) (8015h) (see AX=0000h)
  5015. Notes:    the real mode call structure is static, causing reentrancy problems;
  5016.       its contents are only valid at the time of a callback
  5017.     the called procedure must modify the real mode CS:IP before returning
  5018.     values are returned to real mode by modifying the real mode call struc
  5019.     DPMI hosts must provide at least 16 callbacks per client
  5020. SeeAlso: AX=0304h,AX=0C00h
  5021.  
  5022. Values callback procedure is called with:
  5023.     DS:SI / DS:ESI = selector:offset of real mode SS:SP
  5024.     ES:DI / ES:EDI = selector:offset of real mode call structure
  5025.     SS:SP / SS:ESP = locked protected mode API stack
  5026.     interrupts disabled
  5027. Return: (with IRET)
  5028.     ES:DI / ES:EDI = selector:offset of real mode call structure to restore
  5029. --------E-310304-----------------------------
  5030. INT 31 P - DPMI 0.9+ - FREE REAL MODE CALLBACK ADDRESS
  5031.     AX = 0304h
  5032.     CX:DX = real mode callback address
  5033. Return: CF clear if successful
  5034.     CF set on error
  5035.         AX = error code (DPMI 1.0+) (8024h) (see AX=0000h)
  5036. SeeAlso: AX=0303h
  5037. --------E-310305-----------------------------
  5038. INT 31 P - DPMI 0.9+ - GET STATE SAVE/RESTORE ADDRESSES
  5039.     AX = 0305h
  5040. Return: CF clear
  5041.     AX = size in bytes of state buffer
  5042.     BX:CX = real mode address of procedure to save/restore state
  5043.     SI:DI / SI:EDI = protected mode procedure to save/restore state
  5044. Notes:    the buffer size will be zero if it is not necessary to preserve state
  5045.     16-bit programs should call SI:DI, 32-bit programs should call SI:EDI
  5046.     this function is only needed if using the raw mode switch service
  5047. SeeAlso: AX=0306h
  5048.  
  5049. Values to call state-save procedures with:
  5050.     AL = direction
  5051.         00h save state
  5052.         01h restore state
  5053.     ES:DI / ES:EDI -> state buffer
  5054. Return: all registers preserved
  5055. --------E-310306-----------------------------
  5056. INT 31 P - DPMI 0.9+ - GET RAW MODE SWITCH ADDRESSES
  5057.     AX = 0306h
  5058. Return:    CF clear
  5059.     BX:CX -> procedure to switch from real to protected mode
  5060.     SI:DI / SI:EDI -> procedure to switch from protected to real mode
  5061. Notes:    16-bit programs should jump to SI:DI, 32-bit programs should use SI:EDI
  5062.     the caller must save and restore the state of the task with AX=0305h
  5063.     not supported by MS Windows 3.0 in Standard mode
  5064. SeeAlso: AX=0305h
  5065.  
  5066. Values to JUMP at mode-switch procedures with:
  5067.     AX = new DS
  5068.     CX = new ES
  5069.     DX = new SS
  5070.     BX / EBX = new SP / ESP
  5071.     SI = new CS
  5072.     DI / EDI = new IP / EIP
  5073. Notes:    BP/EBP is preserved across the call, but AX/EAX, BX/EBX, CX/ECX,
  5074.       DX/EDX, SI/ESI, and DI/EDI will be undefined; FS and GS will be 0000h
  5075.     interrupts will stay disabled during the entire mode switch if they
  5076.       are disabled on entry to the mode-switch procedure
  5077. --------E-310400-----------------------------
  5078. INT 31 P - DPMI 0.9+ - GET DPMI VERSION
  5079.     AX = 0400h
  5080. Return: CF clear
  5081.     AH = major version of DPMI spec supported
  5082.     AL = two-digit minor version of DPMI spec supported
  5083.     BX = flags
  5084.         bit 0: running under an 80386 (32-bit) implementation
  5085.         bit 1: processor returns to real mode for reflected interrupts
  5086.            instead of V86 mode
  5087.         bit 2: virtual memory supported
  5088.         bit 3: reserved (undefined)
  5089.         others reserved (zero)
  5090.     CL = processor type (02h=80286, 03h=80386, 04h=80486)
  5091.     DH = curr value of virtual master interrupt controller base interrupt
  5092.     DL = curr value of virtual slave interrupt controller base interrupt
  5093. SeeAlso: AX=0401h,INT 21/AX=250Ch,INT 2F/AX=1687h,INT 67/AX=DE0Ah
  5094. --------E-310401-----------------------------
  5095. INT 31 P - DPMI 1.0+ - GET DPMI CAPABILITIES
  5096.     AX = 0401h
  5097.     ES:(E)DI -> 128-byte buffer for host description (see below)
  5098. Return: CF clear if successful
  5099.         AX = capabilities (see below)
  5100.         CX = reserved (00h)
  5101.         DX = reserved (00h)
  5102.         buffer filled
  5103.     CF set on error (DPMI 0.9 only)
  5104. SeeAlso: AX=0400h
  5105.  
  5106. Bitfields for capabilities:
  5107.  bit 0    paged accessed/dirty supported (see AX=0506h,AX=0507h)
  5108.  bit 1    exceptions restartability supported
  5109.  bit 2    device mapping supported (see AX=0508h)
  5110.  bit 3    conventional memory mapping supported (see AX=0509h)
  5111.  bit 4    demand zero-fill supported
  5112.  bit 5    write-protect client capability supported
  5113.  bit 6    write-protect host capability supported
  5114.  bits 7-15 reserved
  5115.  
  5116. Format of host description:
  5117. Offset    Size    Description
  5118.  00h    BYTE    host major version number
  5119.  01h    BYTE    host minor version number
  5120.  02h 126 BYTEs    ASCIZ host vendor name
  5121. --------E-310500-----------------------------
  5122. INT 31 P - DPMI 0.9+ - GET FREE MEMORY INFORMATION
  5123.     AX = 0500h
  5124.     ES:DI / ES:EDI -> buffer for memory information (see below)
  5125. Return: CF clear
  5126. Notes:    16-bit programs use ES:DI, 32-bit programs use ES:EDI
  5127.     this function must be considered advisory because other applications
  5128.       may affect the results at any time after the call
  5129.     fields not supported by the DPMI implementation are filled with
  5130.       FFFFFFFFh
  5131.     DPMI 1.0+ supports this function solely for backward compatibility; use
  5132.       AX=050Bh instead
  5133. SeeAlso: AX=0501h,AX=0604h
  5134.  
  5135. Format of memory information:
  5136. Offset    Size    Description
  5137.  00h    DWORD    largest available block in bytes
  5138.  04h    DWORD    maximum unlocked page allocation
  5139.  08h    DWORD    maximum locked page allocation
  5140.  0Ch    DWORD    total linear address space in pages
  5141.  10h    DWORD    total unlocked pages
  5142.  14h    DWORD    free pages
  5143.  18h    DWORD    total physical pages
  5144.  1Ch    DWORD    free linear address space in pages
  5145.  20h    DWORD    size of paging file/partition in pages
  5146.  24h 12 BYTEs    reserved
  5147. --------E-310501-----------------------------
  5148. INT 31 P - DPMI 0.9+ - ALLOCATE MEMORY BLOCK
  5149.     AX = 0501h
  5150.     BX:CX = size in bytes
  5151. Return: CF clear if successful
  5152.         BX:CX = linear address of block
  5153.         SI:DI = memory block handle for resizing and freeing block
  5154.     CF set on error
  5155.         AX = error code (DPMI 1.0+) (8012h-8014h,8016h,8021h)(see AX=0000h)
  5156. Notes:    no selectors are allocated
  5157.     the memory block is allocated unlocked (can be locked with AX=0600h)
  5158.     allocations are often page granular (see AX=0604h)
  5159. SeeAlso: AX=0000h,AX=0100h,AX=0500h,AX=0502h,AX=0503h,AX=0504h,AX=0D00h
  5160. SeeAlso: INT 2F/AX=FB42h/BX=0002h
  5161. --------E-310502-----------------------------
  5162. INT 31 P - DPMI 0.9+ - FREE MEMORY BLOCK
  5163.     AX = 0502h
  5164.     SI:DI = handle of memory block
  5165. Return: CF clear if successful
  5166.     CF set on error
  5167.         AX = error code (DPMI 1.0+) (8023h) (see AX=0000h)
  5168. Note:    any selectors allocated for the memory block must also be freed,
  5169.       preferably before freeing the memory block
  5170. SeeAlso: AX=0001h,AX=0101h,AX=0501h,AX=0D01h
  5171. --------E-310503-----------------------------
  5172. INT 31 P - DPMI 0.9+ - RESIZE MEMORY BLOCK
  5173.     AX = 0503h
  5174.     BX:CX = new size in bytes (nonzero)
  5175.     SI:DI = handle of memory block
  5176. Return: CF clear if successful
  5177.         BX:CX = new linear address
  5178.         SI:DI = new handle of memory block
  5179.     CF set on error
  5180.         AX = error code (DPMI 1.0+) (8012h-8014h,8016h,8021h,8023h)
  5181.         (see AX=0000h)
  5182. Notes:    any selectors pointing at the block must be updated
  5183.     the previous memory block handle becomes invalid
  5184.     an error is returned if the new size is 0
  5185. SeeAlso: AX=0102h,AX=0501h,AX=0505h
  5186. --------E-310504-----------------------------
  5187. INT 31 P - DPMI 1.0+ - ALLOCATE LINEAR MEMORY BLOCK
  5188.     AX = 0504h
  5189.     EBX = page-aligned linear address of memory block (00000000h if any
  5190.         address is acceptable)
  5191.     ECX = size in bytes (nonzero)
  5192.     EDX = flags
  5193.         bit 0: set to create committed pages instead of uncommitted pages
  5194.         bits 1-31 reserved (0)
  5195. Return: CF clear if successful
  5196.         EBX = linear address of memory block
  5197.         ESI = memory block handle
  5198.     CF set on error
  5199.         AX = error code (8001h,8012h-8014h,8016h,8021h,8025h)(see AX=0000h)
  5200. Note:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  5201. SeeAlso: AX=0501h,AX=0505h
  5202. --------E-310505-----------------------------
  5203. INT 31 P - DPMI 1.0+ - RESIZE LINEAR MEMORY BLOCK
  5204.     AX = 0505h
  5205.     ESI = memory block handle
  5206.     ECX = new size in bytes (nonzero)
  5207.     EDX = flags
  5208.         bit 0: create committed pages rather than uncommitted pages
  5209.         bit 1: segment descriptor update required
  5210.         ES:EBX -> buffer containing array of WORDs with selectors
  5211.         EDI = number of selectors in array
  5212.         bits 2-31 reserved (0)
  5213. Return: CF clear if successful
  5214.         EBX = new linear base address
  5215.         ESI = new memory block handle
  5216.     CF set on error
  5217.         AX = error code (8001h,8012h-8014h,8016h,8021h,8023h)(see AX=0000h)
  5218. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  5219.     the old memory block handle becomes invalid
  5220.     if EDX bit 1 set and the block's base address is changed, DPMI updates
  5221.       all descriptors for selectors in the update buffer which fall within
  5222.       the memory block
  5223. SeeAlso: AX=0503h,AX=0504h
  5224. --------E-310506-----------------------------
  5225. INT 31 P - DPMI 1.0+ - GET PAGE ATTRIBUTES
  5226.     AX = 0506h
  5227.     ESI = memory block handle
  5228.     EBX = offset in memory block of first page
  5229.     ECX = number of pages
  5230.     ES:EDX -> array of WORDs to hold page attributes (see below)
  5231. Return: CF clear if successful
  5232.         buffer filled
  5233.     CF set on error
  5234.         AX = error code (8001h,8023h,8025h) (see AX=0000h)
  5235. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  5236.     if EBX is not page-aligned, it will be rounded down
  5237. SeeAlso: AX=0504h,AX=0507h,INT 21/AX=251Dh,INT 21/AX=EB00h
  5238.  
  5239. Format of page attribute words:
  5240.  bits 0-2    page type
  5241.         000 uncommitted
  5242.         001 committed
  5243.         010 mapped (see AX=0508h,AX=0509h)
  5244.         other currently unused
  5245.  bit 3        page is read/write rather than read-only
  5246.  bit 4        accessed/dirty bits supplied in bits 5 and 6
  5247.  bit 5        page has been accessed (only valid if bit 4 set)
  5248.  bit 6        page has been written (only valid if bit 4 set)
  5249.  bits 7-15    reserved (0)
  5250. --------E-310507-----------------------------
  5251. INT 31 P - DPMI 1.0+ - MODIFY PAGE ATTRIBUTES
  5252.     AX = 0507h
  5253.     ESI = memory block handle
  5254.     EBX = offset in memory block of first page
  5255.     ECX = number of pages
  5256.     ES:EDX -> array of WORDs with new page attributes (see AX=0506h)
  5257. Return: CF clear if successful
  5258.     CF set on error
  5259.         AX = error code (8001h,8002h,8013h,8014h,8021h,8023h,8025h)
  5260.         (see AX=0000h)
  5261.         ECX = number of pages which have been set
  5262. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  5263.     if EBX is not page-aligned, it will be rounded down
  5264. SeeAlso: AX=0504h,AX=0506h,INT 21/AX=251Eh
  5265. --------E-310508-----------------------------
  5266. INT 31 P - DPMI 1.0+ - MAP DEVICE IN MEMORY BLOCK
  5267.     AX = 0508h
  5268.     ESI = memory block handle
  5269.     EBX = page-aligned offset within memory block of page(s) to be mapped
  5270.     ECX = number of pages to map
  5271.     EDX = page-aligned physical address of device
  5272. Return: CF clear if successful
  5273.     CF set on error
  5274.         AX = error code (8001h,8003h,8023h,8025h) (see AX=0000h)
  5275. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  5276.     support of this function is optional; hosts are also allowed to support
  5277.       the function for some devices but not others
  5278. SeeAlso: AX=0504h,AX=0509h,AX=0800h,AX=0801h
  5279. --------E-310509-----------------------------
  5280. INT 31 P - DPMI 1.0+ - MAP CONVENTIONAL MEMORY IN MEMORY BLOCK
  5281.     AX = 0509h
  5282.     ESI = memory block handle
  5283.     EBX = page-aligned offset within memory block of page(s) to map
  5284.     ECX = number of pages to map
  5285.     EDX = page-aligned linear address of conventional (below 1M) memory
  5286. Return: CF clear if successful
  5287.     CF set on error
  5288.         AX = error code (8001h,8003h,8023h,8025h) (see AX=0000h)
  5289. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  5290.     support of this function is optional
  5291. SeeAlso: AX=0504h,AX=0508h,AX=0801h
  5292. --------E-31050A-----------------------------
  5293. INT 31 P - DPMI 1.0+ - GET MEMORY BLOCK SIZE AND BASE
  5294.     AX = 050AH
  5295.     SI:DI = memory block handle
  5296. Return: CF clear if successful
  5297.         SI:DI = size in bytes
  5298.         BX:CX = base address
  5299.     CF set on error
  5300.         AX = error code (8023h) (see AX=0000h)
  5301. SeeAlso: AX=0501h,AX=0504h
  5302. --------E-31050B-----------------------------
  5303. INT 31 P - DPMI 1.0+ - GET MEMORY INFORMATION
  5304.     AX = 050Bh
  5305.     ES:(E)DI -> 128-byte buffer for memory information (see below)
  5306. Return: CF clear if successful
  5307.     CF set on error (DPMI 0.9 only)
  5308. Note:    16-bit programs use ES:DI, 32-bit programs must use ES:EDI
  5309. SeeAlso: AX=0500h
  5310.  
  5311. Format of memory information:
  5312. Offset    Size    Description
  5313.  00h    DWORD    total allocated bytes of physical memory controlled by host
  5314.  04h    DWORD    total allocated bytes of virtual memory controlled by host
  5315.  08h    DWORD    total available bytes of virtual memory controlled by host
  5316.  0Ch    DWORD    total allocated bytes of virtual memory for curr virtual mach
  5317.  10h    DWORD    total available bytes of virtual memory for curr virtual mach
  5318.  14h    DWORD    total allocated bytes of virtual memory for current client
  5319.  18h    DWORD    total available bytes of virtual memory for current client
  5320.  1Ch    DWORD    total locked bytes for current client
  5321.  20h    DWORD    maximum locked bytes for current client
  5322.  24h    DWORD    highest linear address available to current client
  5323.  28h    DWORD    largest available memory block in bytes
  5324.  2Ch    DWORD    minimum allocation unit in bytes
  5325.  30h    DWORD    allocation alignment unit size in bytes
  5326.  34h 76 BYTEs    reserved (00h)
  5327. --------E-310600-----------------------------
  5328. INT 31 P - DPMI 0.9+ - LOCK LINEAR REGION
  5329.     AX = 0600h
  5330.     BX:CX = starting linear address
  5331.     SI:DI = size of region in bytes
  5332. Return: CF clear if successful
  5333.     CF set on error
  5334.         none of the memory is locked
  5335.         AX = error code (DPMI 1.0+) (8013h,8017h,8025h) (see AX=0000h)
  5336. Notes:    pages at beginning and end will be locked if the region overlaps them
  5337.     may be called multiple times for a given page; the DPMI host keeps a
  5338.       lock count for each page
  5339. SeeAlso: AX=0004h,AX=0601h,INT 21/AX=251Ah,INT 21/AX=EB06h
  5340. --------E-310601-----------------------------
  5341. INT 31 P - DPMI 0.9+ - UNLOCK LINEAR REGION
  5342.     AX = 0601h
  5343.     BX:CX = starting linear address
  5344.     SI:DI = size of region in bytes
  5345. Return: CF clear if successful
  5346.     CF set on error
  5347.         none of the memory is unlocked
  5348.         AX = error code (DPMI 1.0+) (8002h,8025h) (see AX=0000h)
  5349. Notes:    pages at beginning and end will be unlocked if the region overlaps them
  5350.     memory whose lock count has not reached zero remains locked
  5351. SeeAlso: AX=0005h,AX=0600h,INT 21/AX=251Bh,INT 21/AX=EB07h
  5352. --------E-310602-----------------------------
  5353. INT 31 P - DPMI 0.9+ - MARK REAL MODE REGION AS PAGEABLE
  5354.     AX = 0602h
  5355.     BX:CX = starting linear address
  5356.     SI:DI = size of region in bytes
  5357. Return: CF clear if successful
  5358.     CF set on error    
  5359.         none of the memory is made pageable
  5360.         AX = error code (DPMI 1.0+) (8002h,8025h) (see AX=0000h)
  5361. Notes:    must relock all unlocked real mode memory before terminating process
  5362.       for DPMI 0.9; DPMI 1.0+ automatically relocks real mode memory
  5363.     pages at beginning and end will be unlocked if the region overlaps them
  5364.     pageability of real mode pages is binary, not a count
  5365. SeeAlso: AX=0600h,AX=0603h
  5366. --------E-310603-----------------------------
  5367. INT 31 P - DPMI 0.9+ - RELOCK REAL MODE REGION
  5368.     AX = 0603h
  5369.     BX:CX = starting linear address
  5370.     SI:DI = size of region in bytes
  5371. Return: CF clear if successful
  5372.     CF set on error    
  5373.         none of the memory is relocked
  5374.         AX = error code (DPMI 1.0+) (8002h,8013h,8025h) (see AX=0000h)
  5375. Notes:    pages at beginning and end will be relocked if the region overlaps them
  5376.     pageability of real mode pages is binary, not a count
  5377. SeeAlso: AX=0602h
  5378. --------E-310604-----------------------------
  5379. INT 31 P - DPMI 0.9+ - GET PAGE SIZE
  5380.     AX = 0604h
  5381. Return: CF clear if successful
  5382.         BX:CX = page size in bytes
  5383.     CF set on error
  5384.         AX = error code (DPMI 1.0+)
  5385.         8001h unsupported, 16-bit host
  5386. --------E-310700-----------------------------
  5387. INT 31 P - DPMI 0.9+ - MARK PAGES AS PAGING CANDIDATES
  5388.     AX = 0700h
  5389.     BX:CX = starting linear page number
  5390.     SI:DI = number of pages to mark as paging candidates
  5391. Return: ???
  5392. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  5393.       specification, this function is called by MS Windows TASKMAN,
  5394.       PROGMAN, and KERNEL
  5395. SeeAlso: AX=0701h,AX=0702h
  5396. --------E-310701-----------------------------
  5397. INT 31 P - DPMI 0.9+ - DISCARD PAGES
  5398.     AX = 0701h
  5399.     BX:CX = starting linear page number
  5400.     SI:DI = number of pages to discard
  5401. Return: ???
  5402. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  5403.       specification, this function is called by MS Windows TASKMAN,
  5404.       PROGMAN, and KERNEL
  5405. SeeAlso: AX=0700h,AX=0703h
  5406. --------E-310702-----------------------------
  5407. INT 31 P - DPMI 0.9+ - MARK PAGE AS DEMAND PAGING CANDIDATE
  5408.     AX = 0702h
  5409.     BX:CX = starting linear address
  5410.     SI:DI = number of bytes to mark as paging candidates
  5411. Return: CF clear if successful
  5412.     CF set on error
  5413.         AX = error code (DPMI 1.0+) (8025h) (see AX=0000h)
  5414. Notes:    this function is advisory, and does not force immediate paging
  5415.     partial pages will not be discarded
  5416. SeeAlso: AX=0700h,AX=0703h
  5417. --------E-310703-----------------------------
  5418. INT 31 P - DPMI 0.9+ - DISCARD PAGE CONTENTS
  5419.     AX = 0703h
  5420.     BX:CX = starting linear address
  5421.     SI:DI = number of bytes to mark as discarded
  5422. Return: CF clear if successful
  5423.     CF set on error
  5424.         AX = error code (DPMI 1.0+) (8025h) (see AX=0000h)
  5425. Notes:    this function is advisory, and may be ignored by DPMI implementations
  5426.     partial pages will not be discarded
  5427. SeeAlso: AX=0701h,AX=0702h
  5428. --------E-310800-----------------------------
  5429. INT 31 P - DPMI 0.9+ - PHYSICAL ADDRESS MAPPING
  5430.     AX = 0800h
  5431.     BX:CX = physical address (should be above 1 MB)
  5432.     SI:DI = size in bytes
  5433. Return:    CF clear if successful
  5434.         BX:CX = linear address which maps the requested physical memory
  5435.     CF set on error
  5436.         AX = error code (DPMI 1.0+) (8003h,8021h) (see AX=0000h)
  5437. Notes:    implementations may refuse this call because it can circumvent protects
  5438.     the caller must build an appropriate selector for the memory
  5439.     do not use for memory mapped in the first megabyte
  5440. SeeAlso: AX=0002h,AX=0508h,AX=0509h,AX=0801h,INT 21/AX=250Ah,INT 21/AX=EB05h
  5441. --------E-310801-----------------------------
  5442. INT 31 P - DPMI 1.0+ - FREE PHYSICAL ADDRESS MAPPING
  5443.     AX = 0801h
  5444.     BX:CX = linear address returned by AX=0800h
  5445. Return: CF clear if successful
  5446.     CF set on error
  5447.         AX = error code (8025h) (see AX=0000h)
  5448. Note:    should be called at end of access to device mapped with AX=0800h
  5449. SeeAlso: AX=0508h,AX=0509h,AX=0800h,INT 21/AX=EB03h
  5450. --------E-310900-----------------------------
  5451. INT 31 P - DPMI 0.9+ - GET AND DISABLE VIRTUAL INTERRUPT STATE
  5452.     AX = 0900h
  5453. Return: CF clear
  5454.     virtual interrupts disabled
  5455.     AL = 00h if previously disabled
  5456.        = 01h if previously enabled
  5457.     AH preserved
  5458. Notes:    the previous state may be restored simply by executing another INT 31
  5459.     a CLI instruction may be used if the previous state is unimportant,
  5460.       but should be assumed to be very slow due to trapping by the host
  5461. SeeAlso: AX=0901h,AX=0902h
  5462. --------E-310901-----------------------------
  5463. INT 31 P - DPMI 0.9+ - GET AND ENABLE VIRTUAL INTERRUPT STATE
  5464.     AX = 0901h
  5465. Return: CF clear
  5466.     virtual interrupts enabled
  5467.     AL = 00h if previously disabled
  5468.        = 01h if previously enabled
  5469.     AH preserved
  5470. Notes:    the previous state may be restored simply by executing another INT 31
  5471.     a STI instruction may be used if the previous state is unimportant,
  5472.       but should be assumed to be very slow due to trapping by the host
  5473. SeeAlso: AX=0900h,AX=0902h
  5474. --------E-310902-----------------------------
  5475. INT 31 P - DPMI 0.9+ - GET VIRTUAL INTERRUPT STATE
  5476.     AX = 0902h
  5477. Return: CF clear
  5478.     AL = 00h if disabled
  5479.        = 01h if enabled
  5480. Note:    should be used rather than PUSHF because that instruction yields the
  5481.       physical interrupt state rather than the per-client virtualized
  5482.       interrupt flag
  5483. SeeAlso: AX=0900h,AX=0901h
  5484. --------E-310A00-----------------------------
  5485. INT 31 P - DPMI 0.9+ - GET VENDOR SPECIFIC API ENTRY POINT
  5486.     AX = 0A00h
  5487.     DS:SI / DS:ESI -> case-sensitive ASCIZ vendor name or identifier
  5488. Return: CF clear if successful
  5489.         ES:DI / ES:EDI -> FAR extended API entry point
  5490.         DS, FS, GS, EAX, EBX, ECX, EDX, ESI, EBP destroyed
  5491.     CF set on error
  5492.         AX = error code (DPMI 1.0+) (8001h) (see AX=0000h)
  5493. Notes:    extended API parameters are vendor-specific
  5494.     DPMI 1.0+ supports this function solely for backward compatibility; use
  5495.       INT 2F/AX=168Ah instead
  5496. SeeAlso: INT 2F/AX=168Ah
  5497. --------E-310B00-----------------------------
  5498. INT 31 P - DPMI 0.9+ - SET DEBUG WATCHPOINT
  5499.     AX = 0B00h
  5500.     BX:CX = linear address
  5501.     DL = size (1,2,4 bytes)
  5502.     DH = type (00h execute, 01h write, 02h read/write)
  5503. Return: CF clear if successful
  5504.         BX = watchpoint handle
  5505.     CF set on error
  5506.         AX = error code (DPMI 1.0+) (8016h,8021h,8025h) (see AX=0000h)
  5507. SeeAlso: AX=0212h,AX=0601h
  5508. --------E-310B01-----------------------------
  5509. INT 31 P - DPMI 0.9+ - CLEAR DEBUG WATCHPOINT
  5510.     AX = 0B01h
  5511.     BX = watchpoint handle
  5512. Return: CF clear if successful
  5513.     CF set on error
  5514.         AX = error code (DPMI 1.0+) (8023h) (see AX=0000h)
  5515. Note:    the watchpoint handle is freed
  5516. SeeAlso: AX=0B00h
  5517. --------E-310B02-----------------------------
  5518. INT 31 P - DPMI 0.9+ - GET STATE OF DEBUG WATCHPOINT
  5519.     AX = 0B02h
  5520.     BX = watchpoint handle
  5521. Return: CF clear if successful
  5522.         AX = status flags
  5523.         bit 0: watch point has been executed since AX=0B00h or AX=0B03h
  5524.     CF set on error
  5525.         AX = error code (DPMI 1.0+) (8023h) (see AX=0000h)
  5526. SeeAlso: AX=0B00h,AX=0B03h
  5527. --------E-310B03-----------------------------
  5528. INT 31 P - DPMI 0.9+ - RESET DEBUG WATCHPOINT
  5529.     AX = 0B03h
  5530.     BX = watchpoint handle
  5531. Return: CF clear if successful
  5532.     CF set on error
  5533.         AX = error code (DPMI 1.0+) (8023h) (see AX=0000h)
  5534. SeeAlso: AX=0B02h
  5535. --------E-310C00-----------------------------
  5536. INT 31 P - DPMI 1.0+ - INSTALL RESIDENT HANDLER INIT CALLBACK
  5537.     AX = 0C00h
  5538.     ES:(E)DI -> resident service provider structure (see below)
  5539. Return: CF clear if successful
  5540.     CF set on error
  5541.         AX = error code (8015h,8021h,8025h) (see AX=0000h)
  5542. Note:    calling this function declares an intent to provide resident
  5543.       protected mode services after terminating with AX=0C01h
  5544. SeeAlso: AX=0303h,AX=0C01h
  5545.  
  5546. Format of resident service provider structure:
  5547. Offset    Size    Description
  5548.  00h    QWORD    descriptor for 16-bit data segment
  5549.  08h    QWORD    descriptor for 16-bit code segment (zeros if not supported)
  5550.  10h    WORD    offset of 16-bit callback procedure
  5551.  12h  2 BYTEs    reserved
  5552.  14h    QWORD    descriptor for 32-bit data segment
  5553.  1Ch    QWORD    descriptor for 32-bit code segment (zeros if not supported)
  5554.  24h    DWORD    offset of 32-bit callback procedure
  5555. --------E-310C01-----------------------------
  5556. INT 31 P - DPMI 1.0+ - TERMINATE AND STAY RESIDENT
  5557.     AX = 0C01h
  5558.     BL = return code
  5559.     DX = number of paragraphs of DOS memory to reserve (0 or >= 6)
  5560. Return: never
  5561. Notes:    should only be used if the program will only provide services to
  5562.       other DPMI programs
  5563.     any protected mode memory remains allocated to the program unless
  5564.       explicitly freed before this call
  5565.     must first call AX=0C00h or program will simply be terminated
  5566. SeeAlso: AX=0C00h,INT 21/AH=31h
  5567. --------E-310D00-----------------------------
  5568. INT 31 P - DPMI 1.0+ - ALLOCATE SHARED MEMORY
  5569.     AX = 0D00h
  5570.     ES:(E)DI -> shared memory allocation request structure (see below)
  5571. Return: CF clear if successful
  5572.         request structure updated
  5573.     CF set on error
  5574.         AX = error code (8012h,8013h,8014h,8016h,8021h) (see AX=0000h)
  5575. Note:    first 16 bytes of memory block will be initialized to zeros on the
  5576.       first allocation
  5577. SeeAlso: AX=0501h,AX=0D01h,AX=0D02h
  5578.  
  5579. Format of shared memory allocation request structure:
  5580. Offset    Size    Description
  5581.  00h    DWORD    requested length of shared memory block in bytes
  5582.  04h    DWORD    (return) allocated length of block
  5583.  08h    DWORD    (return) shared memory handle
  5584.  0Ch    DWORD    (return) linear address of memory block
  5585.  10h  6 BYTEs    selector:offset32 of ASCIZ name for memory block
  5586.         (name max 128 bytes)
  5587.  16h  2 BYTEs    reserved
  5588.  18h  4 BYTEs    reserved (00h)
  5589. --------E-310D01-----------------------------
  5590. INT 31 P - DPMI 1.0+ - FREE SHARED MEMORY
  5591.     AX = 0D01h
  5592.     SI:DI = shared memory block handle
  5593. Return: CF clear if successful
  5594.     CF set on error
  5595.         AX = error code (8023h) (see AX=0000h)
  5596. Notes:    handle becomes invalid after this call
  5597.     DPMI maintains separate global and virtual machine use counts for each
  5598.       shared memory block; when the global use counts reaches zero, the
  5599.       block is finally destroyed
  5600. SeeAlso: AX=0502h,AX=0D00h
  5601. --------E-310D02-----------------------------
  5602. INT 31 P - DPMI 1.0+ - SERIALIZE SHARED MEMORY
  5603.     AX = 0D02h
  5604.     SI:DI = shared memory block handle
  5605.     DX = flags
  5606.         bit 0: return immediately rather than suspending if serialization
  5607.             unavailable
  5608.         bit 1: shared rather than exclusive serialization
  5609.         bits 2-15 reserved (0)
  5610. Return: CF clear if successful
  5611.     CF set on error
  5612.         AX = error code (8004h,8005h,8017h-8019h,8023h) (see AX=0000h)
  5613. Notes:    an exclusive serialization blocks any other serialization attempts for
  5614.       the same block by another virtual machine; a shared serialization
  5615.       blocks attempts at exclusive serialization by another virtual machine
  5616.     hosts are not required to detect deadlock
  5617.     a client's interrupt handler can cancel a serialization call which
  5618.       caused it to block by calling AX=0D03h
  5619. SeeAlso: AX=0D00h,AX=0D03h
  5620. --------E-310D03-----------------------------
  5621. INT 31 P - DPMI 1.0+ - FREE SERIALIZATION ON SHARED MEMORY
  5622.     AX = 0D03h
  5623.     SI:DI = shared memory block handle
  5624.     DX = flags
  5625.         bit 0: release shared serialization rather than exclusive serialztn
  5626.         bit 1: free pending serialization
  5627.         bits 2-15 reserved (0)
  5628. Return: CF clear if successful
  5629.     CF set on error
  5630.         AX = error code (8002h,8023h) (see AX=0000h)
  5631. SeeAlso: AX=0D00h,AX=0D02h
  5632. --------E-310E00-----------------------------
  5633. INT 31 P - DPMI 1.0+ - GET COPROCESSOR STATUS
  5634.     AX = 0E00h
  5635. Return: CF clear
  5636.     AX = coprocessor status
  5637.         bit 0: numeric coprocessor enabled for current client
  5638.         bit 1: client is emulating coprocessor
  5639.         bit 2: numeric coprocessor is present
  5640.         bit 3: host is emulating coprocessor instructions
  5641.         bits 4-7: coprocessor type
  5642.         0000 none
  5643.         0010 80287
  5644.         0011 80387
  5645.         0100 80486 with numeric coprocessor
  5646.         other reserved
  5647.         bits 8-15 not used
  5648. Note:    supported by 386MAX v6.01, which otherwise only supports DPMI 0.9
  5649. SeeAlso: AX=0E01h
  5650. --------E-310E01-----------------------------
  5651. INT 31 P - DPMI 1.0+ - SET EMULATION
  5652.     AX = 0E01h
  5653.     BX = coprocessor flag bits
  5654.         bit 0: enable numeric coprocessor for current client
  5655.         bit 1: client will emulate coprocessor
  5656.         bits 2-15 not used
  5657. Return: CF clear if successful
  5658.     CF set on error
  5659.         AX = error code (8026h) (see AX=0000h)
  5660. Note:    supported by 386MAX v6.01, which otherwise only supports DPMI 0.9
  5661. SeeAlso: AX=0E00h
  5662. --------v-32---------------------------------
  5663. INT 32 - VIRUS - reportedly used by "Tiny" Viruses
  5664. SeeAlso: INT 21/AX=FFFFh"VIRUS",INT 31"VIRUS",INT 44"VIRUS"
  5665. --------v-32---------------------------------
  5666. INT 32 - VIRUS - "Plovdiv 1.3"/"Damage 1.3" - ORIGINAL INT 21h VECTOR
  5667. SeeAlso: INT 31"VIRUS",INT 9E"VIRUS"
  5668. --------M-330000-----------------------------
  5669. INT 33 - MS MOUSE - RESET DRIVER AND READ STATUS
  5670.     AX = 0000h
  5671. Return: AX = status
  5672.         0000h hardware/driver not installed
  5673.         FFFFh hardware/driver installed
  5674.     BX = number of buttons
  5675.         0000h other than two
  5676.         0002h two buttons (many drivers)
  5677.         0003h Mouse Systems/Logitech three-button mouse
  5678.         FFFFh two buttons
  5679. Notes:    to use mouse on a Hercules-compatible monographics card in graphics
  5680.       mode, you must first set 0040h:0049h to 6 for page 0 or 5 for page 1,
  5681.       and then call this function.    Logitech drivers v5.01 and v6.00
  5682.       reportedly do not correctly use Hercules graphics in dual-monitor
  5683.       systems, while version 4.10 does.
  5684.     the Logitech mouse driver contains the signature string "LOGITECH" 
  5685.       three bytes past the interrupt handler; many of the Logitech mouse
  5686.       utilities check for this signature.
  5687. SeeAlso: AX=0011h,AX=0021h,AX=002Fh,INT 62/AX=007Ah,INT 74
  5688. --------M-330001-----------------------------
  5689. INT 33 - MS MOUSE - SHOW MOUSE CURSOR
  5690.     AX = 0001h
  5691. SeeAlso: AX=0002h,INT 16/AX=FFFEh,INT 62/AX=007Bh
  5692. --------M-330002-----------------------------
  5693. INT 33 - MS MOUSE - HIDE MOUSE CURSOR
  5694.     AX = 0002h
  5695. Note:    multiple calls to hide the cursor will require multiple calls to
  5696.       function 01h to unhide it.
  5697. SeeAlso: AX=0001h,AX=0010h,INT 16/AX=FFFFh,INT 62/AX=007Bh
  5698. --------M-330003-----------------------------
  5699. INT 33 - MS MOUSE - RETURN POSITION AND BUTTON STATUS
  5700.     AX = 0003h
  5701. Return: BX = button status
  5702.        bit 0  left button pressed if 1
  5703.        bit 1  right button pressed if 1
  5704.        bit 2  middle button pressed if 1 (Mouse Systems/Logitech mouse)
  5705.     CX = column
  5706.     DX = row
  5707. SeeAlso: AX=0004h,AX=000Bh,INT 2F/AX=D000h"ZWmous"
  5708. --------M-330004-----------------------------
  5709. INT 33 - MS MOUSE - POSITION MOUSE CURSOR
  5710.     AX = 0004h
  5711.     CX = column
  5712.     DX = row
  5713. Note:    the row and column are truncated to the next lower multiple of the cell
  5714.       size; however, some versions of the Microsoft documentation
  5715.       incorrectly state that the coordinates are rounded
  5716. SeeAlso: AX=0003h,INT 62/AX=0081h
  5717. --------M-330005-----------------------------
  5718. INT 33 - MS MOUSE - RETURN BUTTON PRESS DATA
  5719.     AX = 0005h
  5720.     BX = button
  5721.         0000h left
  5722.         0001h right
  5723.         0002h middle (Mouse Systems/Logitech mouse)
  5724. Return: AX = button states
  5725.         bit 0 left button pressed if 1
  5726.         bit 1 right button pressed if 1
  5727.         bit 2 middle button pressed if 1 (Mouse Systems/Logitech mouse)
  5728.     BX = number of times specified button has been pressed since last call
  5729.     CX = column at time specified button was last pressed
  5730.     DX = row at time specified button was last pressed
  5731. SeeAlso: AX=0006h,INT 62/AX=007Ch
  5732. --------M-330006-----------------------------
  5733. INT 33 - MS MOUSE - RETURN BUTTON RELEASE DATA
  5734.     AX = 0006h
  5735.     BX = button
  5736.         0000h left
  5737.         0001h right
  5738.         0002h middle (Mouse Systems/Logitech mouse)
  5739. Return: AX = button states
  5740.         bit 0 left button pressed if 1
  5741.         bit 1 right button pressed if 1
  5742.         bit 2 middle button pressed if 1 (Mouse Systems/Logitech mouse)
  5743.     BX = number of times specified button has been released since last call
  5744.     CX = column at time specified button was last released
  5745.     DX = row at time specified button was last released
  5746. SeeAlso: AX=0005h,INT 62/AX=007Ch
  5747. --------M-330007-----------------------------
  5748. INT 33 - MS MOUSE - DEFINE HORIZONTAL CURSOR RANGE
  5749.     AX = 0007h
  5750.     CX = minimum column
  5751.     DX = maximum column
  5752. SeeAlso: AX=0008h,AX=0010h,AX=0031h,INT 62/AX=0080h
  5753. --------M-330008-----------------------------
  5754. INT 33 - MS MOUSE - DEFINE VERTICAL CURSOR RANGE
  5755.     AX = 0008h
  5756.     CX = minimum row
  5757.     DX = maximum row
  5758. SeeAlso: AX=0007h,AX=0010h,AX=0031h,INT 62/AX=0080h
  5759. --------M-330009-----------------------------
  5760. INT 33 - MS MOUSE - DEFINE GRAPHICS CURSOR
  5761.     AX = 0009h
  5762.     BX = column of cursor hot spot in bitmap (-16 to 16)
  5763.     CX = row of cursor hot spot (-16 to 16)
  5764.     ES:DX -> bitmap
  5765.         16 words screen mask
  5766.         16 words cursor mask
  5767.             each word defines the sixteen pixels of a row, low bit
  5768.             rightmost
  5769. SeeAlso: AX=000Ah,AX=0012h,AX=002Ah,INT 62/AX=007Fh
  5770. --------M-33000A-----------------------------
  5771. INT 33 - MS MOUSE - DEFINE TEXT CURSOR
  5772.     AX = 000Ah
  5773.     BX = hardware/software text cursor
  5774.         0000h software
  5775.         CX = screen mask
  5776.         DX = cursor mask
  5777.         0001h hardware
  5778.         CX = start scan line
  5779.         DX = end scan line
  5780. Note:    when the software cursor is selected, the char/attribute data at the
  5781.       current screen position is ANDed with the screen mask and then XORed
  5782.       with the cursor mask
  5783. SeeAlso: AX=0009h,INT 62/AX=007Eh
  5784. --------M-33000B-----------------------------
  5785. INT 33 - MS MOUSE - READ MOTION COUNTERS
  5786.     AX = 000Bh
  5787. Return: CX = number of mickeys mouse moved horizontally since last call
  5788.     DX = number of mickeys mouse moved vertically
  5789. Notes:    a mickey is the smallest increment the mouse can sense
  5790.     positive values indicate down/right
  5791. SeeAlso: AX=0003h,AX=001Bh,AX=0027h
  5792. --------M-33000C-----------------------------
  5793. INT 33 - MS MOUSE - DEFINE INTERRUPT SUBROUTINE PARAMETERS
  5794.     AX = 000Ch
  5795.     CX = call mask
  5796.          bit 0 call if mouse moves
  5797.          bit 1 call if left button pressed
  5798.          bit 2 call if left button released
  5799.          bit 3 call if right button pressed
  5800.          bit 4 call if right button released
  5801.          bit 5 call if middle button pressed (Mouse Systems/Logitech mouse)
  5802.          bit 6 call if middle button released (Mouse Sys/Logitech mouse)
  5803.     ES:DX -> FAR routine
  5804. Notes:    when the subroutine is called, it is passed the following values:
  5805.       AX = condition mask (same bit assignments as call mask)
  5806.       BX = button state
  5807.       CX = cursor column
  5808.       DX = cursor row
  5809.       SI = horizontal mickey count
  5810.       DI = vertical mickey count
  5811.     some versions of the Microsoft documentation incorrectly state that CX
  5812.       bit 0 means call if mouse cursor moves, and swap the meanings of SI
  5813.       and DI
  5814. SeeAlso: AX=0018h
  5815. --------M-33000D-----------------------------
  5816. INT 33 - MS MOUSE - LIGHT PEN EMULATION ON
  5817.     AX = 000Dh
  5818. SeeAlso: AX=000Eh,INT 10/AH=04h
  5819. --------M-33000E-----------------------------
  5820. INT 33 - MS MOUSE - LIGHT PEN EMULATION OFF
  5821.     AX = 000Eh
  5822. SeeAlso: AX=000Dh
  5823. --------M-33000F-----------------------------
  5824. INT 33 - MS MOUSE - DEFINE MICKEY/PIXEL RATIO
  5825.     AX = 000Fh
  5826.     CX = number of mickeys per 8 pixels horizontally (default 8)
  5827.     DX = number of mickeys per 8 pixels vertically (default 16)
  5828. SeeAlso: AX=0013h,AX=001Ah,INT 62/AX=0082h
  5829. --------M-330010-----------------------------
  5830. INT 33 - MS MOUSE - DEFINE SCREEN REGION FOR UPDATING
  5831.     AX = 0010h
  5832.     CX,DX = X,Y coordinates of upper left corner
  5833.     SI,DI = X,Y coordinates of lower right corner
  5834. Note:    mouse cursor is hidden in the specified region, and needs to be
  5835.       explicitly turned on again
  5836. SeeAlso: AX=0001h,AX=0002h,AX=0007h,AX=0010h"Genius MOUSE",AX=0031h
  5837. --------M-330010-----------------------------
  5838. INT 33 - Genius MOUSE - DEFINE SCREEN REGION FOR UPDATING
  5839.     AX = 0010h
  5840.     ES:DX -> update region list (see below)
  5841. Notes:    mouse cursor is hidden in the specified region, and needs to be
  5842.       explicitly turned on again
  5843.     this version of the call is described in an August 1988 version of the
  5844.       Genius Mouse programmer's reference; it has been changed to conform
  5845.       to the Microsoft version shown above by version 9.06 (and possibly
  5846.       earlier versions)
  5847. SeeAlso: AX=0001h,AX=0002h,AX=0007h,AX=0010h"MS MOUSE"
  5848.  
  5849. Format of update region list:
  5850. Offset    Size    Description
  5851.  00h    WORD    left-most column
  5852.  02h    WORD    top-most row
  5853.  04h    WORD    right-most column
  5854.  06h    WORD    bottom-most row
  5855. --------M-330011-----------------------------
  5856. INT 33 - Genius Mouse 9.06 - GET NUMBER OF BUTTONS
  5857.     AX = 0011h
  5858. Return: AX = FFFFh
  5859.     BX = number of buttons
  5860. SeeAlso: AX=0000h
  5861. --------M-330012-----------------------------
  5862. INT 33 - MS MOUSE - SET LARGE GRAPHICS CURSOR BLOCK
  5863.     AX = 0012h
  5864.     BH = cursor width in words
  5865.     CH = rows in cursor
  5866.     BL = horizontal hot spot (-16 to 16)
  5867.     CL = vertical hot spot (-16 to 16)
  5868.     ES:DX -> bit map of screen and cursor maps
  5869. Return: AX = FFFFh if successful
  5870. SeeAlso: AX=0009h,AX=002Ah,AX=0035h
  5871. --------M-330013-----------------------------
  5872. INT 33 - MS MOUSE - DEFINE DOUBLE-SPEED THRESHOLD
  5873.     AX = 0013h
  5874.     DX = threshold speed in mickeys/second, 0000h = default of 64/second
  5875. Note:    if speed exceeds threshold, the cursor's on-screen motion is doubled
  5876. SeeAlso: AX=000Fh,AX=001Bh,AX=002Ch
  5877. --------M-330014-----------------------------
  5878. INT 33 - MS MOUSE - EXCHANGE INTERRUPT SUBROUTINES
  5879.     AX = 0014h
  5880.     CX = call mask (see AX=000Ch)
  5881.     ES:DX -> FAR routine 
  5882. Return: CX = call mask of previous interrupt routine
  5883.     ES:DX = FAR address of previous interrupt routine
  5884. SeeAlso: AX=000Ch,AX=0018h
  5885. --------M-330015-----------------------------
  5886. INT 33 - MS MOUSE - RETURN DRIVER STORAGE REQUIREMENTS
  5887.     AX = 0015h
  5888. Return: BX = size of buffer needed to store driver state
  5889. SeeAlso: AX=0016h,AX=0017h,AX=0042h
  5890. --------M-330016-----------------------------
  5891. INT 33 - MS MOUSE - SAVE DRIVER STATE
  5892.     AX = 0016h
  5893.     BX = size of buffer (see AX=0015h)
  5894.     ES:DX -> buffer for driver state
  5895. Note:    although not documented, many drivers appear to require BX on input
  5896. SeeAlso: AX=0015h,AX=0017h
  5897. --------M-330017-----------------------------
  5898. INT 33 - MS MOUSE - RESTORE DRIVER STATE
  5899.     AX = 0017h
  5900.     BX = size of buffer (see AX=0015h)
  5901.     ES:DX -> buffer containing saved state
  5902. Notes:    although not documented, many drivers appear to require BX on input
  5903.     some mouse drivers range-check the values in the saved state based on
  5904.       the current video mode; thus, the video mode should be restored
  5905.       before the mouse driver's state is restored
  5906. SeeAlso: AX=0015h,AX=0016h
  5907. --------M-330018-----------------------------
  5908. INT 33 - MS MOUSE - SET ALTERNATE MOUSE USER HANDLER
  5909.     AX = 0018h
  5910.     CX = call mask
  5911.          bit 0 call if mouse moves
  5912.          bit 1 call if left button pressed
  5913.          bit 2 call if left button released
  5914.          bit 3 call if right button pressed
  5915.          bit 4 call if right button released
  5916.          bit 5 call if shift button pressed during event
  5917.          bit 6 call if ctrl key pressed during event
  5918.          bit 7 call if alt key pressed during event
  5919.     ES:DX -> FAR routine
  5920. Return: AX = 0018h if successful
  5921.        = FFFFh on error
  5922. Notes:    when the subroutine is called, it is passed the following values:
  5923.       AX = condition mask (same bit assignments as call mask)
  5924.       BX = button state
  5925.       CX = cursor column
  5926.       DX = cursor row
  5927.       SI = horizontal mickey count
  5928.       DI = vertical mickey count
  5929.     up to three handlers can be defined by separate calls to this function
  5930. SeeAlso: AX=000Ch,AX=0014h,AX=0019h
  5931. --------M-330019-----------------------------
  5932. INT 33 - MS MOUSE - RETURN USER ALTERNATE INTERRUPT VECTOR
  5933.     AX = 0019h
  5934.     CX = call mask (see AX=0018h)
  5935. Return: BX:DX = user interrupt vector
  5936.     CX = call mask (0000h if not found)
  5937. Note:    attempts to find a user event handler (defined by function 18h)
  5938.       whose call mask matches CX
  5939. SeeAlso: AX=0018h
  5940. --------M-33001A-----------------------------
  5941. INT 33 - MS MOUSE - SET MOUSE SENSITIVITY
  5942.     AX = 001Ah
  5943.     BX = horizontal speed \
  5944.     CX = vertical speed   / (see AX=000Fh)
  5945.     DX = double speed threshold (see AX=0013h)
  5946. SeeAlso: AX=0013h,AX=001Bh,INT 62/AX=0082h
  5947. --------M-33001B-----------------------------
  5948. INT 33 - MS MOUSE - RETURN MOUSE SENSITIVITY
  5949.     AX = 001Bh
  5950. Return: BX = horizontal speed
  5951.     CX = vertical speed
  5952.     DX = double speed threshold
  5953. SeeAlso: AX=000Bh,AX=001Ah
  5954. --------M-33001C-----------------------------
  5955. INT 33 - MS MOUSE - SET INTERRUPT RATE
  5956.     AX = 001Ch
  5957.     BX = rate
  5958.         00h no interrupts allowed
  5959.         01h 30 per second
  5960.         02h 50 per second
  5961.         03h 100 per second
  5962.         04h 200 per second
  5963. Notes:    only available on InPort mouse
  5964.     values greater than 4 may cause unpredictable driver behavior
  5965. --------M-33001D-----------------------------
  5966. INT 33 - MS MOUSE - DEFINE DISPLAY PAGE NUMBER
  5967.     AX = 001Dh
  5968.     BX = display page number
  5969. Note:    the cursor will be displayed on the specified page
  5970. SeeAlso: AX=001Eh
  5971. --------M-33001E-----------------------------
  5972. INT 33 - MS MOUSE - RETURN DISPLAY PAGE NUMBER
  5973.     AX = 001Eh
  5974. Return: BX = display page number
  5975. SeeAlso: AX=001Dh
  5976. --------M-33001F-----------------------------
  5977. INT 33 - MS MOUSE - DISABLE MOUSE DRIVER
  5978.     AX = 001Fh
  5979. Return: AX = 001Fh unsuccessful
  5980.          FFFFh successful
  5981.     ES:BX = vector for INT 33h before mouse driver was first installed
  5982. Notes:    restores vectors for INT 10h and INT 71h (8086) or INT 74h (286/386)
  5983.     if you restore Int 33h to ES:BX, driver will be completely disabled
  5984.     many drivers return AX=001Fh even though the driver has been disabled
  5985. SeeAlso: AX=0020h
  5986. --------M-330020-----------------------------
  5987. INT 33 - MS MOUSE - ENABLE MOUSE DRIVER
  5988.     AX = 0020h
  5989. Return: AX = 0020h unsuccessful (or driver not installed)
  5990.          FFFFh successful
  5991. Notes:    restores vectors for INT 10h and INT 71h (8086) or INT 74h (286/386)
  5992.       which were removed by function 1Fh
  5993.     many drivers return AX=0020h even though the driver has been enabled
  5994. SeeAlso: AX=001Fh
  5995. --------M-330021-----------------------------
  5996. INT 33 - MS MOUSE - SOFTWARE RESET
  5997.     AX = 0021h
  5998. Return: AX = FFFFh if mouse driver installed
  5999.         BX = number of buttons (FFFFh = two buttons)
  6000.          0021h if mouse driver not installed
  6001. Note:    identical to funtion 00h, but does not reset the mouse
  6002. SeeAlso: AX=0000h
  6003. --------M-330022-----------------------------
  6004. INT 33 - MS MOUSE - SET LANGUAGE FOR MESSAGES
  6005.     AX = 0022h
  6006.     BX = language
  6007.         00h English
  6008.         01h French
  6009.         02h Dutch
  6010.         03h German
  6011.         04h Swedish
  6012.         05h Finnish
  6013.         06h Spanish
  6014.         07h Portugese
  6015.         08h Italian
  6016. Note:    only available on international versions of the driver, US versions
  6017.       ignore this call
  6018. SeeAlso: AX=0023h
  6019. --------M-330023-----------------------------
  6020. INT 33 - MS MOUSE - GET LANGUAGE FOR MESSAGES
  6021.     AX = 0023h
  6022. Return:    BX = language (see AX=0022h)
  6023. Note:    the US version of the driver always returns zero 
  6024. SeeAlso: AX=0022h
  6025. --------M-330024-----------------------------
  6026. INT 33 - MS MOUSE v6.26+ - GET SOFTWARE VERSION, MOUSE TYPE, AND IRQ NUMBER
  6027.     AX = 0024h
  6028. Return: AX = FFFFh on error
  6029.     otherwise,
  6030.         BH = major version
  6031.         BL = minor version
  6032.         CH = type (1=bus, 2=serial, 3=InPort, 4=PS/2, 5=HP)
  6033.         CL = interrupt (0=PS/2, 2=IRQ2, 3=IRQ3,...,7=IRQ7)
  6034. SeeAlso: AX=004Dh,AX=006Dh
  6035. --------M-330025-----------------------------
  6036. INT 33 - MS MOUSE v6.26+ - GET GENERAL DRIVER INFORMATION
  6037.     AX = 0025h
  6038. Return: AX = general information
  6039.         bit 15: driver loaded as device driver rather than TSR
  6040.         bit 14: driver is newer integrated type
  6041.         bits 13,12: current cursor type
  6042.             00 software text cursor
  6043.             01 hardware text cursor
  6044.             1X graphics cursor
  6045.         bits 11-8: interrupt rate (see AX=001Ch)
  6046.         bits 7-0:  count of currently-active Mouse Display Drivers (MDD),
  6047.             the newer integrated driver type
  6048.     BX = cursor lock flag for OS/2 to prevent reentrancy problems
  6049.     CX = mouse code active flag (for OS/2)
  6050.     DX = mouse driver busy flag (for OS/2)
  6051. --------M-330026-----------------------------
  6052. INT 33 - MS MOUSE v6.26+ - GET MAXIMUM VIRTUAL COORDINATES
  6053.     AX = 0026h
  6054. Return: BX = mouse-disabled flag
  6055.     CX = maximum virtual X (for current video mode)
  6056.     DX = maximum virtual Y
  6057. SeeAlso: AX=0031h
  6058. --------M-330026-----------------------------
  6059. INT 33 - Genius Mouse 9.06 - ???
  6060.     AX = 0026h
  6061. Return: CX = 0204h if CX was 0105h on entry, else unchanged
  6062. --------M-330027-----------------------------
  6063. INT 33 - MS MOUSE v7.01+ - GET SCREEN/CURSOR MASKS AND MICKEY COUNTS
  6064.     AX = 0027h
  6065. Return: AX = screen-mask value (or hardware cursor scan-line start for v7.02+)
  6066.     BX = cursor-mask value (or hardware cursor scan-line stop for v7.02+)
  6067.     CX = horizontal mickeys moved since last call
  6068.     DX = vertical mickeys moved since last call
  6069. SeeAlso: AX=000Bh
  6070. --------M-330028-----------------------------
  6071. INT 33 - MS MOUSE v7.0+ - SET VIDEO MODE
  6072.     AX = 0028h
  6073.     CX = new video mode (call is NOP if 0000h)
  6074.     DH = Y font size (00h = default)
  6075.     DL = X font size (00h = default)
  6076. Return: CL = status (00h = successful)
  6077. Note:    DX is ignored unless the selected video mode supports font size control
  6078. SeeAlso: AX=0029h,INT 10/AH=00h
  6079. --------M-330029-----------------------------
  6080. INT 33 - MS MOUSE v7.0+ - ENUMERATE VIDEO MODES
  6081.     AX = 0029h
  6082.     CX = previous video mode
  6083.         0000h get first supported video mode
  6084.         other get next supported mode after mode CX
  6085. Return: CX = first/next video mode (0000h = no more video modes)
  6086.     BS:DX -> description of video mode or 0000h:0000h if none
  6087. Notes:    the enumerated video modes may be in any order and may repeat
  6088.     the description string (if available) is terminated by '$' followed by
  6089.       a NUL byte
  6090. SeeAlso: AX=0028h
  6091. --------M-33002A-----------------------------
  6092. INT 33 - MS MOUSE v7.02+ - GET CURSOR HOT SPOT
  6093.     AX = 002Ah
  6094. Return: AX = internal counter controlling cursor visibility
  6095.     BX = cursor hot spot column
  6096.     CX = cursor hot spot row
  6097.     DX = mouse type (00h none, 01h bus, 02h serial, 03h InPort, 04h IBM,
  6098.              05h Hewlett-Packard)
  6099. Note:    the hot spot location is relative to the upper left corner of the
  6100.       cursor block and may range from -128 to +127 both horizontally and
  6101.       vertically
  6102. SeeAlso: AX=0009h,AX=0012h,AX=0035h
  6103. --------M-33002B-----------------------------
  6104. INT 33 - MS MOUSE v7.0+ - LOAD ACCELERATION PROFILES
  6105.     AX = 002Bh
  6106.     BX = active acceleration profile
  6107.         0001h-0004h or FFFFh to restore default curves
  6108.     ES:SI -> buffer containing acceleration profile data (see below)
  6109. Return: AX = success flag
  6110. SeeAlso: AX=002Ch,AX=002Dh,AX=0033h
  6111.  
  6112. Format of acceleration profile data:
  6113. Offset    Size    Description
  6114.  00h    BYTE    length of acceleration profile 1
  6115.  01h    BYTE    length of acceleration profile 2
  6116.  02h    BYTE    length of acceleration profile 3
  6117.  03h    BYTE    length of acceleration profile 4
  6118.  04h 32 BYTEs    threshold speeds for acceleration profile 1
  6119.  24h 32 BYTEs    threshold speeds for acceleration profile 2
  6120.  44h 32 BYTEs    threshold speeds for acceleration profile 3
  6121.  64h 32 BYTEs    threshold speeds for acceleration profile 4
  6122.  84h 32 BYTEs    speedup factor for acceleration profile 1
  6123.         (10h = 1.0, 14h = 1.25, 20h = 2.0, etc)
  6124.  A4h 32 BYTEs    speedup factor for acceleration profile 2
  6125.         (10h = 1.0, 14h = 1.25, 20h = 2.0, etc)
  6126.  C4h 32 BYTEs    speedup factor for acceleration profile 3
  6127.         (10h = 1.0, 14h = 1.25, 20h = 2.0, etc)
  6128.  E4h 32 BYTEs    speedup factor for acceleration profile 4
  6129.         (10h = 1.0, 14h = 1.25, 20h = 2.0, etc)
  6130. 104h 16 BYTEs    name of acceleration profile 1 (blank-padded)
  6131. 114h 16 BYTEs    name of acceleration profile 2 (blank-padded)
  6132. 124h 16 BYTEs    name of acceleration profile 3 (blank-padded)
  6133. 134h 16 BYTEs    name of acceleration profile 4 (blank-padded)
  6134. Note:    unused bytes in the threshold speed fields are filled with 7Fh and
  6135.       unused bytes in the speedup factor fields are filled with 10h
  6136. --------M-33002C-----------------------------
  6137. INT 33 - MS MOUSE v7.0+ - GET ACCELERATION PROFILES
  6138.     AX = 002Ch
  6139. Return: AX = status (0000h success)
  6140.     BX = currently-active acceleration profile
  6141.     ES:SI -> acceleration profile data (see AX=002Bh)
  6142. SeeAlso: AX=002Bh,AX=002Dh,AX=0033h
  6143. --------M-33002D-----------------------------
  6144. INT 33 - MS MOUSE v7.0+ - SELECT ACCELERATION PROFILE
  6145.     AX = 002Dh
  6146.     BX = acceleration level
  6147.         0001h-0004h to set profile, or FFFFh to get current profile
  6148. Return: AX = status
  6149.         0000h successful
  6150.         ES:SI -> 16-byte blank-padded name of acceleration profile
  6151.         FFFEh invalid acceleration curve number
  6152.         ES:SI destroyed
  6153.     BX = active acceleration curve number
  6154. SeeAlso: AX=0013h,AX=002Bh,AX=002Ch,AX=002Eh
  6155. --------M-33002E-----------------------------
  6156. INT 33 - MS MOUSE v8.10+ - SET ACCELERATION PROFILE NAMES
  6157.     AX = 002Eh
  6158.     BL = flag (if nonzero, fill ES:SI buffer with default names on return)
  6159.     ES:SI -> 64-byte buffer for profile names (16 bytes per name)
  6160. Return: AX = status (0000h success)
  6161.     ES:SI buffer filled with default names if BL nonzero on entry
  6162. Note:    not supported by Logitech driver v6.10
  6163. SeeAlso: AX=002Ch,AX=002Dh,AX=012Eh,AX=022Eh
  6164. --------M-33002F-----------------------------
  6165. INT 33 - MS MOUSE v7.02+ - MOUSE HARDWARE RESET
  6166.     AX = 002Fh
  6167. Return: AX = status
  6168. Note:    invoked by mouse driver v8.20 on being called with INT 2F/AX=530Bh
  6169. SeeAlso: INT 2F/AH=53h
  6170. --------M-330030-----------------------------
  6171. INT 33 - MS MOUSE v7.04+ - GET/SET BallPoint INFORMATION
  6172.     AX = 0030h
  6173.     CX = command
  6174.         0000h get status of BallPoint device
  6175.         other set rotation angle and masks
  6176.         BX = rotation angle (-32768 to 32767 degrees)
  6177.         CH = primary button mask
  6178.         CL = secondary button mask
  6179. Return: AX = button status (FFFFh if no BallPoint)
  6180.         bit 5: button 1
  6181.         bit 4: button 2
  6182.         bit 3: button 3
  6183.         bit 2: button 4
  6184.         other: zero
  6185.     BX = rotation angle (0-360 degrees)
  6186.     CH = primary button mask
  6187.     CL = secondary button mask
  6188. --------M-330031-----------------------------
  6189. INT 33 - MS MOUSE v7.05+ - GET CURRENT MINIMUM/MAXIMUM VIRTUAL COORDINATES
  6190.     AX = 0031h
  6191. Return: AX = virtual X minimum
  6192.     BX = virtual Y minimum
  6193.     CX = virtual X maximum
  6194.     DX = virtual Y maximum
  6195. Note:    the minimum and maximum values are those set by AX=0007h and AX=0008h;
  6196.       the default is minimum = 0 and maximum = absolute maximum
  6197.       (see AX=0026h)
  6198. SeeAlso: AX=0007h,AX=0008h,AX=0010h,AX=0026h
  6199. --------M-330032-----------------------------
  6200. INT 33 - MS MOUSE v7.05+ - GET ACTIVE ADVANCED FUNCTIONS
  6201.     AX = 0032h
  6202. Return: AX = active function flags (FFFFh for v8.10)
  6203.         bit 15: function 0025h supported
  6204.         bit 14: function 0026h supported
  6205.         ...
  6206.         bit 0:  function 0034h supported
  6207.     BX = ??? (0000h) officially unused
  6208.     CX = ??? (E000h) officially unused
  6209.     DX = ??? (0000h) officially unused
  6210. --------M-330033-----------------------------
  6211. INT 33 - MS MOUSE v7.05+ - GET SWITCH SETTINGS AND ACCELERATION PROFILE DATA
  6212.     AX = 0033h
  6213.     CX = size of buffer
  6214.         0000h get required buffer size
  6215.         Return: AX = 0000h
  6216.             CX = required size (0154h for Logitech v6.10, 0159h
  6217.                 for MS v8.10-8.20)
  6218.         other
  6219.         ES:DX -> buffer of CX bytes
  6220.         Return: AX = 0000h
  6221.             CX = number of bytes returned
  6222.             ES:DX buffer filled (see below)
  6223. SeeAlso: AX=002Bh
  6224.  
  6225. Format of data buffer:
  6226. Offset    Size    Description
  6227.  00h    BYTE    mouse type
  6228.  01h    BYTE    current language
  6229.  02h    BYTE    horizontal sensitivity (00h-64h)
  6230.  03h    BYTE    vertical sensitivity (00h-64h)
  6231.  04h    BYTE    double-speed threshold (00h-64h)
  6232.  05h    BYTE    ballistic curve (01h-04h)
  6233.  06h    BYTE    interrupt rate (01h-04h)
  6234.  07h    BYTE    cursor override mask
  6235.  08h    BYTE    laptop adjustment
  6236.  09h    BYTE    memory type (00h-02h)
  6237.  0Ah    BYTE    SuperVGA support (00h,01h)
  6238.  0Bh    BYTE    rotation angle
  6239.  0Ch    BYTE    ???
  6240.  0Dh    BYTE    primary button (01h-04h)
  6241.  0Eh    BYTE    secondary button (01h-04h)
  6242.  0Fh    BYTE    click lock enabled (00h,01h)
  6243.  10h 324 BYTEs    acceleration profile data (see AX=002Bh)
  6244. 154h  5 BYTEs    ??? (Microsoft driver, but not Logitech)
  6245. --------M-330034-----------------------------
  6246. INT 33 - MS MOUSE v8.0+ - GET INITIALIZATION FILE
  6247.     AX = 0034h
  6248. Return: AX = status (0000h successful)
  6249.     ES:DX -> ASCIZ initialization (.INI) file name
  6250. --------M-330035-----------------------------
  6251. INT 33 - MS MOUSE v8.10+ - LCD SCREEN LARGE POINTER SUPPORT
  6252.     AX = 0035h
  6253.     BX = function
  6254.         FFFFh get current settings
  6255.         Return: AX = 0000h
  6256.             BH = style (see below)
  6257.             BL = size (see below)
  6258.             CH = threshold
  6259.             CL = active flag (00h disabled, 01h enabled)
  6260.             DX = delay
  6261.         other
  6262.         BH = style (00h normal, 01h reverse, 02h transparent)
  6263.         BL = size (00h small "1", 01h medium "1.5", 02h large "2")
  6264.         CH = threshold (00h-64h)
  6265.         CL = active flag (00h disable size change, 01h enable)
  6266.         DX = delay (0000h-0064h)
  6267.         Return: AX = 0000h
  6268. Note:    not supported by Logitech driver v6.10
  6269. SeeAlso: AX=0012h,AX=002Ah
  6270. --------M-330042-----------------------------
  6271. INT 33 - PCMOUSE - GET MSMOUSE STORAGE REQUIREMENTS
  6272.     AX = 0042h
  6273. Return: AX = FFFFh successful
  6274.         BX = buffer size in bytes for functions 50h and 52h
  6275.        = 0000h MSMOUSE not installed
  6276.        = 0042h functions 42h, 50h, and 52h not supported
  6277. Note:    this function is also supported by the Genius Mouse 9.06 driver
  6278. SeeAlso: AX=0015h,AX=0050h,AX=0052h
  6279. --------M-330043-----------------------------
  6280. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - CONFIGURE MOUSE???
  6281.     AX = 0043h
  6282.     CX:BX -> ??? buffer (see below)
  6283.     DL = ???
  6284. Return: ???
  6285. Notes:    also calls routines for INT 33/AX=0053h and INT 33/AX=004Fh
  6286.     this function is also supported by the Genius Mouse 9.06 driver
  6287.  
  6288. Format of buffer:
  6289. Offset    Size    Description
  6290.  00h    WORD    I/O port address
  6291.  02h    BYTE    ???
  6292.  03h    BYTE    interrupt number
  6293.  04h    BYTE    interrupt mask for interrupt controller
  6294.  05h  5 BYTEs    ???
  6295. --------M-330044CXCDEF-----------------------
  6296. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - TOGGLE ???
  6297.     AX = 0044h
  6298.     CX = CDEFh
  6299. Return: AX = new state of ???
  6300. Note:    this function is also supported by the Genius Mouse 9.06 driver
  6301. SeeAlso: AX=0045h
  6302. --------M-330045CXCDEF-----------------------
  6303. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - TOGGLE ???
  6304.     AX = 0045h
  6305.     CX = CDEFh
  6306. Return: AX = new state of ???
  6307. Note:    this function is also supported by the Genius Mouse 9.06 driver
  6308. SeeAlso: AX=0044h
  6309. --------M-330047-----------------------------
  6310. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - SET BUTTON ASSIGNMENTS
  6311.     AX = 0047h
  6312.     ES:BX -> button assignments (3 bytes, combinations of "L", "M", "R")
  6313. Return: ???
  6314. Note:    also supported by Genius Mouse 9.06 driver
  6315. SeeAlso: AX=0067h
  6316. --------M-330048BXCDEF-----------------------
  6317. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - GET ???
  6318.     AX = 0048h
  6319.     BX = CDEFh
  6320. Return: CX = ???
  6321.     BH = ???
  6322.     BL = ??? (if 50h, driver is using PS/2 pointing device BIOS interface)
  6323. Note:    also supported by Genius Mouse 9.06 driver
  6324. --------M-33004B-----------------------------
  6325. INT 33 - Z-NIX MOUSE DRIVER v7.04d - INSTALLATION CHECK
  6326.     AX = 004Bh
  6327. Return: ES:DI -> signature/description string if installed
  6328. Note:    the signature string in v7.04d is
  6329.       "Z-NIX;BUS,AUX,Serial 3-byte and 5-byte Mouse Driver;ZMOUSE;v7.04d"
  6330. --------M-33004CBXCDEF-----------------------
  6331. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - SET ??? FLAG
  6332.     AX = 004Ch
  6333.     BX = CDEFh
  6334. Note:    also supported by Genius Mouse 9.06
  6335. SeeAlso: AX=006Ch
  6336. --------M-33004D-----------------------------
  6337. INT 33 - MS MOUSE - RETURN POINTER TO COPYRIGHT STRING
  6338.     AX = 004Dh
  6339. Return: ES:DI -> copyright message "*** This is Copyright 1983 Microsoft"
  6340. Notes:    also supported by Logitech, Kraft, Genius Mouse, and Mouse Systems
  6341.       mouse drivers
  6342.     in the Genius Mouse 9.06 driver, the ASCIZ signature "KYE" immediately
  6343.       follows the above copyright message (KYE Corp. manufactures the
  6344.       driver)
  6345. SeeAlso: AX=0024h,AX=006Dh
  6346. --------M-33004F-----------------------------
  6347. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - ENABLE MOUSE
  6348.     AX = 004Fh
  6349. Return: nothing
  6350. Note:    also supported by Genius Mouse 9.06
  6351. SeeAlso: AX=0043h,AX=0053h
  6352. --------M-330050-----------------------------
  6353. INT 33 - PCMOUSE - SAVE MSMOUSE STATE
  6354.     AX = 0050h
  6355.     BX = buffer size (ignored by some driver versions)
  6356.     ES:DX -> buffer
  6357. Return: AX = FFFFh if successful
  6358. Notes:    the buffer must be large enough to hold the entire state, or following
  6359.       data will be overwritten by state data in versions which ignore BX;
  6360.       use INT 33/AX=0042h to get the required size
  6361.     this function is also supported by the Genius Mouse 9.06 driver
  6362. SeeAlso: AX=0042h,AX=0052h
  6363. --------M-330052-----------------------------
  6364. INT 33 - PCMOUSE - RESTORE MSMOUSE STATE
  6365.     AX = 0052h
  6366.     BX = buffer size (ignored by some driver versions)
  6367.     ES:DX -> buffer
  6368. Return: AX = FFFFh if successful
  6369. Note:    also supported by Genius Mouse 9.06 driver
  6370. SeeAlso: AX=0050h
  6371. --------M-330053-----------------------------
  6372. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - DISABLE MOUSE
  6373.     AX = 0053h
  6374. Return: nothing
  6375. Note:    also supported by Genius Mouse 9.06
  6376. SeeAlso: AX=0043h,AX=004Fh
  6377. --------M-330054CXCDEF-----------------------
  6378. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - SELECT ULTRARES ACCELERATION LEVEL
  6379.     AX = 0054h
  6380.     CX = CDEFh
  6381.     BX = ??? (NOP if <= 0000h)
  6382. Return: ???
  6383. Note:    this function is also supported by the Genius Mouse 9.06 driver
  6384. SeeAlso: AX=005Ah
  6385. --------M-330055-----------------------------
  6386. INT 33 - Kraft Mouse - GET ???
  6387.     AX = 0055h
  6388. Return: CX = ???
  6389.     DX = ???
  6390.     ES = ???
  6391. --------M-330058-----------------------------
  6392. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - ???
  6393.     AX = 0058h
  6394. Return: AX = CS of driver
  6395.     CX:BX = original INT 33 vector
  6396.     DX = ???
  6397. Note:    this function is also supported by the Genius Mouse 9.06 driver
  6398. --------M-33005A-----------------------------
  6399. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - SET ULTRARES ACCELERATIONS
  6400.     AX = 005Ah
  6401.     CX = number of WORDs to copy (max 0014h, but not range-checked)
  6402.     DX:SI -> buffer containing thresholds??? (CX words)
  6403.     DX:BX -> buffer containing acceleration values???
  6404.         (9*14h words, only first CX of each 14h used)
  6405.     ???
  6406. Return: CF clear
  6407.     ???
  6408. Note:    this function is also supported by Genius Mouse 9.06
  6409. SeeAlso: AX=0054h
  6410. --------M-330061BXCDEF-----------------------
  6411. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - ???
  6412.     AX = 0061h
  6413.     BX = CDEFh
  6414. Return: CX = ???
  6415. Note:    also supported by Genius Mouse 9.06
  6416. --------M-330067-----------------------------
  6417. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - GET MOUSE BUTTONS???
  6418.     AX = 0067h         
  6419. Return: BL = number of buttons???
  6420. Note:    also supported by Genius Mouse 9.06
  6421. SeeAlso: AX=0047h
  6422. --------M-33006CBXCDEF-----------------------
  6423. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - CLEAR ??? FLAG
  6424.     AX = 006Ch
  6425.     BX = CDEFh
  6426. Note:    also supported by Genius Mouse 9.06
  6427. SeeAlso: AX=004Ch   
  6428. --------M-33006D-----------------------------
  6429. INT 33 - MS MOUSE - GET VERSION STRING
  6430.     AX = 006Dh
  6431. Return: ES:DI -> Microsoft version number of resident driver (see below)
  6432. Notes:    also supported by Logitech, Mouse Systems, Kraft, and Genius mouse
  6433.       drivers
  6434.     the Mouse Systems 7.01 and Genius Mouse 9.06 drivers report their
  6435.       Microsoft version as 7.00 even though they do not support any of the
  6436.       functions from 0025h through 002Dh supported by the MS 7.00 driver
  6437.       (the Genius Mouse driver supports function 0026h, but it differs
  6438.       from the Microsoft function)
  6439. SeeAlso: AX=0024h,AX=004Dh,AX=266Ch
  6440.  
  6441. Format of Microsoft version number:
  6442. Offset    Size    Description
  6443.  00h    BYTE    major version
  6444.  01h    BYTE    minor version (BCD)
  6445. --------M-330070BXABCD-----------------------
  6446. INT 33 - Mouse Systems MOUSE DRIVER - POPUP.COM - INSTALLATION CHECK
  6447.     AX = 0070h
  6448.     BX = ABCDh
  6449. Return: AX = ABCDh if installed
  6450.         BX:CX -> data structure (see below)
  6451. Notes:    this function is also supported by the Genius Mouse 9.06 driver
  6452.     the v7.01 POPUP.COM and menu drivers also check for the signature
  6453.       CDh ABh BAh DCh at offset -2Ch from the interrupt handler
  6454.     if POPUP is not loaded, the returned data structure contains the proper
  6455.       signature at offset 00h, but not at offset 08h
  6456.  
  6457. Format of data structure:
  6458. Offset    Size    Description
  6459.  00h    WORD    signature ABCDh
  6460.  02h    DWORD    pointer to info structure???
  6461.  06h  2 BYTEs    ???
  6462.  08h    WORD    signature ABCDh
  6463.  
  6464. Format of info structure:
  6465. Offset    Size    Description
  6466.  00h    WORD    driver version
  6467.  02h  8 BYTEs    ???
  6468.  0Ah    WORD    segment of ???
  6469.     ???
  6470. --------M-330072BXABCD-----------------------
  6471. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - ???
  6472.     AX = 0072h
  6473.     BX = ABCDh
  6474. Return: ???
  6475. Note:    this function is also supported by the Genius Mouse 9.06 driver
  6476. --------M-330073BXCDEF-----------------------
  6477. INT 33 - Mouse Systems MOUSE DRIVER v7.01 - GET BUTTON ASSIGNMENTS
  6478.     AX = 0073h
  6479.     BX = CDEFh
  6480.     ES:DX -> 3-byte buffer for button assignments
  6481. Return: CX = number of buttons???
  6482.     ES:DX buffer filled (default is "LMR")
  6483. Note:    also supported by Genius Mouse 9.06
  6484. SeeAlso: AX=0067h
  6485. --------M-33012E-----------------------------
  6486. INT 33 - MS MOUSE v8.10+ - ???
  6487.     AX = 012Eh
  6488.     BL = ???
  6489. Return: AX = 0000h
  6490. Note:    not supported by Logitech driver v6.10
  6491. SeeAlso: AX=002Eh,AX=022Eh
  6492. --------M-33022E-----------------------------
  6493. INT 33 - MS MOUSE v8.10+ - ???
  6494.     AX = 022Eh
  6495.     BL = ???
  6496. Return: AX = 0000h
  6497. Note:    not supported by Logitech driver v6.10
  6498. SeeAlso: AX=002Eh,AX=012Eh
  6499. --------M-33136C-----------------------------
  6500. INT 33 - LOGITECH MOUSE v6.10+ - ???
  6501.     AX = 136Ch
  6502.     BX = ???
  6503. Return: AX = ???
  6504.     BX = ???
  6505. --------M-33146C-----------------------------
  6506. INT 33 - LOGITECH MOUSE v6.10+ - GET/SET ???
  6507.     AX = 146Ch
  6508.     BL = function
  6509.         00h set ???
  6510.         BH = new value (zero/nonzero to clear/set)
  6511.         else get ???
  6512.         Return: ???
  6513. --------M-33156C-----------------------------
  6514. INT 33 - LOGITECH MOUSE v6.10+ - GET SIGNATURE AND VERSION STRINGS
  6515.     AX = 156Ch
  6516. Return: ES:DI -> signature "LOGITECH MOUSE DRIVER"
  6517.     ES:SI -> version string, terminated with CRLF
  6518. --------M-33166C-----------------------------
  6519. INT 33 - LOGITECH MOUSE v6.10+ - ???
  6520.     AX = 166Ch
  6521.     BL = ???
  6522.         00h ???
  6523.         01h ???
  6524.         other ???
  6525.         BH = new value of ???
  6526.         Return: AX = FFFFh
  6527. --------M-33176C-----------------------------
  6528. INT 33 - LOGITECH MOUSE v6.10+ - ???
  6529.     AX = 176Ch
  6530.     ???
  6531. Return: ???
  6532. --------M-33186C-----------------------------
  6533. INT 33 - LOGITECH MOUSE v6.10+ - ???
  6534.     AX = 186Ch
  6535.     ???
  6536. Return: ???
  6537. --------M-33196C-----------------------------
  6538. INT 33 - LOGITECH MOUSE v6.10+ - ???
  6539.     AX = 196Ch
  6540.     ???
  6541. Return: ???
  6542. --------M-331A6C-----------------------------
  6543. INT 33 - LOGITECH MOUSE v6.10+ - GET ???
  6544.     AX = 1A6Ch
  6545. Return: AX = FFFFh
  6546.     BX = ???
  6547.     CX = ???
  6548. SeeAlso: AX=1B6Ch
  6549. --------M-331B6C-----------------------------
  6550. INT 33 - LOGITECH MOUSE v6.10+ - SET ???
  6551.     AX = 1B6Ch
  6552.     BX = new value for ??? (0000h-0003h)
  6553. Return: AX = FFFFh
  6554. SeeAlso: AX=1A6Ch
  6555. --------M-331C6C-----------------------------
  6556. INT 33 - LOGITECH MOUSE v6.10+ - ???
  6557.     AX = 1C6Ch
  6558.     BX = ???
  6559.         <42h ???
  6560.         =42h ???
  6561.         >42h ???
  6562.             ES:DI -> ???
  6563.             Return: AX = ???
  6564. --------M-331D6C-----------------------------
  6565. INT 33 - LOGITECH MOUSE - GET COMPASS PARAMETER
  6566.     AX = 1D6Ch
  6567. Return: BX = direction (0=north, 1=south, 2=east, 3=west)
  6568. SeeAlso: AX=1E6Ch
  6569. --------M-331E6C-----------------------------
  6570. INT 33 - LOGITECH MOUSE - SET COMPASS PARAMETER
  6571.     AX = 1E6Ch
  6572.     BX = direction (0=north, 1=south, 2=east, 3=west)
  6573. SeeAlso: AX=1D6Ch
  6574. --------M-331F6C-----------------------------
  6575. INT 33 - LOGITECH MOUSE - GET BALLISTICS INFORMATION
  6576.     AX = 1F6Ch
  6577. Return: BX = 0=off, 1=on
  6578.     CX = 1=low, 2=high
  6579. SeeAlso: AX=002Ch,AX=236Ch
  6580. --------M-33206C-----------------------------
  6581. INT 33 - LOGITECH MOUSE - SET LEFT OR RIGHT PARAMETER
  6582.     AX = 206Ch
  6583.     BX = parameter (00h = right, FFh = left)
  6584. SeeAlso: AX=216Ch
  6585. --------M-33216C-----------------------------
  6586. INT 33 - LOGITECH MOUSE - GET LEFT OR RIGHT PARAMETER
  6587.     AX = 216Ch
  6588. Return: BX = parameter (00h = right, FFh = left)
  6589. SeeAlso: AX=206Ch
  6590. --------M-33226C-----------------------------
  6591. INT 33 - LOGITECH MOUSE - REMOVE DRIVER FROM MEMORY
  6592.     AX = 226Ch
  6593. Note:    this only frees memory; does not restore hooked interrupts
  6594. --------M-33236C-----------------------------
  6595. INT 33 - LOGITECH MOUSE - SET BALLISTICS INFORMATION
  6596.     AX = 236Ch
  6597.     BX = 0=off, 1=on
  6598.     CX = 1=low, 2=high
  6599. SeeAlso: AX=002Ch,AX=1F6Ch
  6600. --------M-33246C-----------------------------
  6601. INT 33 - LOGITECH MOUSE - GET PARAMETERS AND RESET SERIAL MOUSE
  6602.     AX = 246Ch
  6603.     ES:DX -> parameter table buffer (see below)
  6604. Return: AX = FFFFh if driver installed for serial mouse
  6605. SeeAlso: AX=0000h,AX=256Ch
  6606.  
  6607. Format of parameter table:
  6608. Offset    Size    Description
  6609.  00h    WORD    baud rate divided by 100  (serial mouse only)
  6610.  02h    WORD    emulation          (serial mouse only)
  6611.  04h    WORD    report rate          (serial mouse only)
  6612.  06h    WORD    firmware revision      (serial mouse only)
  6613.  08h    WORD    0              (serial mouse only)
  6614.  0Ah    WORD    port              (serial mouse only)
  6615.  0Ch    WORD    physical buttons
  6616.  0Eh    WORD    logical buttons
  6617. --------M-33256CBX00h -----------------------
  6618. INT 33 - LOGITECH MOUSE - SET PARAMETERS
  6619.     AX = 256Ch
  6620.     BX = 00h set baud rate (serial mouse only)
  6621.         CX = rate (0=1200, 1=2400, 2=4800, 3=9600)
  6622.        = 01h set emulation (serial mouse only)
  6623.         CX = emulation
  6624.             0 = 5 byte packed binary
  6625.             1 = 3 byte packed binary
  6626.             2 = hexadecimal
  6627.             3 = relative bit pad
  6628.             4 = not supported
  6629.             5 = MM Series
  6630.             6 = not supported
  6631.             7 = Microsoft
  6632.        = 02h set report rate (serial mouse only)
  6633.         CX = rate (0=10, 1=20, 2=35, 3=50, 4=70, 5=100, 6=150)
  6634.        = 03h set port (serial mouse only)
  6635.         CX = port (1, 2)
  6636.        = 04h set mouse logical buttons
  6637.         CX = buttons (2, 3)
  6638. Return: AX = FFFFh if driver installed for serial mouse
  6639. SeeAlso: AX=246Ch,AX=276Ch
  6640. --------M-33266C-----------------------------
  6641. INT 33 - LOGITECH MOUSE - GET VERSION???
  6642.     AX = 266Ch
  6643. Return: BX = 'SS'
  6644.     CH = '4'  major version number
  6645.     CL = '1'  minor version number
  6646. SeeAlso: AX=006Dh
  6647. --------M-33276C-----------------------------
  6648. INT 33 - LOGITECH MOUSE - ??? Tries MMSeries, Baud 2400
  6649.     AX = 276Ch
  6650. SeeAlso: AX=256Ch
  6651. --------M-333000-----------------------------
  6652. INT 33 - Smooth Mouse Driver, PrecisePoint - INSTALLATION CHECK
  6653.     AX = 3000h
  6654. Return: AX = FFFFh if installed
  6655.         BX = version number (BH = major, BL = minor)
  6656. Program: SMD is a programmer's library by Andy Hakim which provides a
  6657.       graphics-style mouse cursor in text mode.  PrecisePoint is an
  6658.       SMD-based TSR which replaces the block mouse cursor in text
  6659.       applications.
  6660. SeeAlso: AX=0000h,AX=3001h,AX=3003h
  6661. --------M-333001-----------------------------
  6662. INT 33 - Smooth Mouse Driver, PrecisePoint - ENABLE SMOOTH MOUSE
  6663.     AX = 3001h
  6664. Return: AX = status (0000h = disabled, 0001h = enabled)
  6665. Note:    SMD remains disabled if running under Desqview or in graphics mode
  6666. SeeAlso: AX=0001h,AX=0002h,AX=3002h
  6667. --------M-333002-----------------------------
  6668. INT 33 - Smooth Mouse Driver, PrecisePoint - DISABLE SMOOTH MOUSE
  6669.     AX = 3002h
  6670. Return: AX = status (0000h = disabled, 0001h = enabled)
  6671. SeeAlso: AX=0001h,AX=0002h,AX=3000h,AX=3001h
  6672. --------M-333003-----------------------------
  6673. INT 33 - Smooth Mouse Driver, PrecisePoint - GET INFORMATION
  6674.     AX = 3003h
  6675.     BL = data structure selector
  6676.         00h Primary Bitmap (used for 25 line mode)
  6677.         01h Secondary Bitmap (used for 43/50 line modes)
  6678.         02h Sacrifice Character Map
  6679.         03h Program Information
  6680. Return: ES:DX -> selected data structure
  6681. SeeAlso: AX=3000h
  6682.  
  6683. Format of Primary/Secondary Bitmap [SMD_BITMAP_STRUCT]
  6684. Offset    Size    Description
  6685.  00h    BYTE    vertical size of bitmap (00h - 10h)
  6686.  01h    BYTE    horizontal size of bitmap (00h - 10h)
  6687.  02h    BYTE    vertical hotspot position (00h - 10h)
  6688.  03h    BYTE    horizontal hotspot position (00h - 10h)
  6689.  04h 16 WORDs    cursor bitmap data
  6690.  14h 16 WORDs    screen bitmap data
  6691.  
  6692. Format of Sacrifice Character Map [SMD_SMAP_STRUCT]
  6693. Offset    Size    Description
  6694.  00h    BYTE    bytes are character values (00h-FFh) used in place of the
  6695.  01h    BYTE    actual character for the corresponding position on the screen
  6696.  02h    BYTE         +--------------+      occupied by part or all of the mouse
  6697.  03h    BYTE         | 0h | 1h | 2h |      cursor
  6698.  04h    BYTE         |----+----+----|
  6699.  05h    BYTE         | 3h | 4h | 5h |
  6700.  06h    BYTE         |----+----+----|
  6701.  07h    BYTE         | 6h | 7h | 8h |
  6702.  08h    BYTE         +--------------+
  6703.  
  6704. Format of Program Information [SMD_INFO_STRUCT]
  6705. Offset    Size    Description
  6706.  00h    WORD    segment of old interrupt 33h handler
  6707.  02h    WORD    offset of old interrupt 33h handler
  6708.  04h    WORD    PSP of SMD
  6709.  06h    BYTE    ENABLE/DISABLE manual setting status
  6710.  07h    BYTE    ENABLE/DISABLE internal usage status
  6711. --------M-333004-----------------------------
  6712. INT 33 - Smooth Mouse Driver, PrecisePoint - RESERVED FUTURE EXPANSION
  6713.     AX = 3004h
  6714. SeeAlso: AX=3000h
  6715. --------M-333005-----------------------------
  6716. INT 33 - Smooth Mouse Driver, PrecisePoint - RESERVED FUTURE EXPANSION
  6717.     AX = 3005h
  6718. SeeAlso: AX=3000h
  6719. --------M-334F00-----------------------------
  6720. INT 33 - LOGITECH MOUSE v6.10+ - GET ???
  6721.     AX = 4F00h
  6722. Return: AX = 004Fh if supported
  6723.     BX = ???
  6724.     ES:DI -> ???
  6725. SeeAlso: AX=4F01h
  6726. --------M-334F01-----------------------------
  6727. INT 33 - LOGITECH MOUSE v6.10+ - ???
  6728.     AX = 4F01h
  6729.     ES = ???
  6730. Return: AX = 004Fh if supported
  6731.     ES:DI -> ???
  6732. SeeAlso: AX=4F00h
  6733. --------T-33FFE6-----------------------------
  6734. INT 33 - Switch-It v3.23 - GET ??? PROGRAM
  6735.     AX = FFE6h
  6736.     CX = length of buffer
  6737.     ES:DI -> buffer for program name
  6738. Return: ES:DI buffer filled
  6739. Program: Switch-It is a task switcher supporting up to 100 programs 
  6740.       simultaneously by Better Software Technology, Inc.
  6741. --------T-33FFE7-----------------------------
  6742. INT 33 - Switch-It v3.23 - GET ???
  6743.     AX = FFE7h
  6744. Return: AX = ???
  6745. --------T-33FFE8-----------------------------
  6746. INT 33 - Switch-It v3.23 - ???
  6747.     AX = FFE8h
  6748.     CX = length of name including terminating NUL
  6749.     DS:SI -> ASCIZ program pathname
  6750. --------T-33FFE9-----------------------------
  6751. INT 33 - Switch-It v3.23 - SET ???
  6752.     AX = FFE9h
  6753.     BX = ???
  6754. --------T-33FFEA-----------------------------
  6755. INT 33 - Switch-It v3.23 - SET ???
  6756.     AX = FFEAh
  6757.     BL = ???
  6758. --------T-33FFEB-----------------------------
  6759. INT 33 - Switch-It v3.23 - SET ??? FLAG
  6760.     AX = FFEBh
  6761. --------T-33FFEC-----------------------------
  6762. INT 33 - Switch-It v3.23 - SET ???
  6763.     AX = FFECh
  6764.     BL = ???
  6765. --------T-33FFED-----------------------------
  6766. INT 33 - Switch-It v3.23 - GET ???
  6767.     AX = FFEDh
  6768. Return: AX = ??? (0001h)
  6769.     BX = ???
  6770. Program: Switch-It is a task switcher supporting up to 100 programs 
  6771.       simultaneously by Better Software Technology, Inc.
  6772. --------T-33FFEE-----------------------------
  6773. INT 33 - Switch-It v3.23 - GET ???
  6774.     AX = FFEEh
  6775. Return: AX = ???
  6776. --------T-33FFEF-----------------------------
  6777. INT 33 - Switch-It v3.23 - GET ???
  6778.     AX = FFEFh
  6779. Return: BX:AX -> ???
  6780. --------T-33FFF0-----------------------------
  6781. INT 33 - Switch-It v3.23 - SET ???
  6782.     AX = FFF0h
  6783.     BL = ???
  6784. --------T-33FFF1-----------------------------
  6785. INT 33 - Switch-It v3.23 - GET CONFIGURATION FILE
  6786.     AX = FFF1h
  6787. Return: BX:AX -> ASCIZ pathname of configuration file
  6788. Program: Switch-It is a task switcher supporting up to 100 programs 
  6789.       simultaneously by Better Software Technology, Inc.
  6790. --------T-33FFF2-----------------------------
  6791. INT 33 - Switch-It v3.23 - SET ??? FLAG
  6792.     AX = FFF2h
  6793. Return: AL = 01h
  6794. --------T-33FFF3-----------------------------
  6795. INT 33 - Switch-It v3.23 - GET ???
  6796.     AX = FFF3h
  6797. Return: AX = ???
  6798. --------T-33FFF4-----------------------------
  6799. INT 33 - Switch-It v3.23 - SET ???
  6800.     AX = FFF4h
  6801.     BX = ???
  6802.     CX = ???
  6803. --------T-33FFF5-----------------------------
  6804. INT 33 - Switch-It v3.23 - GET ???
  6805.     AX = FFF5h
  6806. Return: AX = ???
  6807. --------T-33FFF6-----------------------------
  6808. INT 33 - Switch-It v3.23 - GET ???
  6809.     AX = FFF6h
  6810. Return: AX = ???
  6811. --------T-33FFF7-----------------------------
  6812. INT 33 - Switch-It v3.23 - GET ???
  6813.     AX = FFF7h
  6814.     BX = index of ???
  6815. Return: AX = ???
  6816. --------T-33FFF8-----------------------------
  6817. INT 33 - Switch-It v3.23 - ???
  6818.     AX = FFF8h
  6819.     BX = ???
  6820.     CX = length of program name, including terminating NUL
  6821.     DS:SI -> ASCIZ program pathname
  6822. Return: ???
  6823. Program: Switch-It is a task switcher supporting up to 100 programs 
  6824.       simultaneously by Better Software Technology, Inc.
  6825. --------T-33FFF9-----------------------------
  6826. INT 33 - Switch-It v3.23 - NOP
  6827.     AX = FFF9h
  6828. --------T-33FFFA-----------------------------
  6829. INT 33 - Switch-It v3.23 - SET ???
  6830.     AX = FFFAh
  6831.     BX = index of program
  6832. SeeAlso: AX=FFFBh,AX=FFFCh
  6833. --------T-33FFFB-----------------------------
  6834. INT 33 - Switch-It v3.23 - GET ???
  6835.     AX = FFFBh
  6836.     BX = index of program
  6837. Return: AX = ??? (0000h or 0001h)
  6838. SeeAlso: AX=FFFAh,AX=FFFCh
  6839. --------T-33FFFC-----------------------------
  6840. INT 33 - Switch-It v3.23 - CLEAR ???
  6841.     AX = FFFCh
  6842.     BX = index of program
  6843. SeeAlso: AX=FFFAh,AX=FFFCh
  6844. --------T-33FFFD-----------------------------
  6845. INT 33 - Switch-It v3.23 - GET MEMORY ADDRESSES???
  6846.     AX = FFFDh
  6847. Return: AX = first available segment???
  6848.     BX = paragraph of top of conventional memory
  6849.     DX = PSP segment of SI.EXE
  6850. --------T-33FFFE-----------------------------
  6851. INT 33 - Switch-It v3.23 - INSTALLATION CHECK
  6852.     AX = FFFEh
  6853. Return: BX = ???
  6854.     DX = 5349h ("SI")
  6855. --------T-33FFFF-----------------------------
  6856. INT 33 - Switch-It v3.23 - ???
  6857.     AX = FFFFh
  6858.     BX = ???
  6859. Program: Switch-It is a task switcher supporting up to 100 programs 
  6860.       simultaneously by Better Software Technology, Inc.
  6861. --------r-34---------------------------------
  6862. INT 34 - FLOATING POINT EMULATION - OPCODE D8h
  6863. Desc:    this interrupt is used to emulate floating-point instructions with
  6864.       an opcode of D8h
  6865. Note:    the floating-point emulators in Borland and Microsoft languages and
  6866.       Lahey FORTRAN use this interrupt
  6867. SeeAlso: INT 35,INT 3E
  6868. --------r-35---------------------------------
  6869. INT 35 - FLOATING POINT EMULATION - OPCODE D9h
  6870. Desc:    this interrupt is used to emulate floating-point instructions with
  6871.       an opcode of D9h
  6872. Note:    the floating-point emulators in Borland and Microsoft languages and
  6873.       Lahey FORTRAN use this interrupt
  6874. SeeAlso: INT 34,INT 36
  6875. --------r-36---------------------------------
  6876. INT 36 - FLOATING POINT EMULATION - OPCODE DAh
  6877. Desc:    this interrupt is used to emulate floating-point instructions with
  6878.       an opcode of DAh
  6879. Note:    the floating-point emulators in Borland and Microsoft languages and
  6880.       Lahey FORTRAN use this interrupt
  6881. SeeAlso: INT 35,INT 37
  6882. --------r-37---------------------------------
  6883. INT 37 - FLOATING POINT EMULATION - OPCODE DBh
  6884. Desc:    this interrupt is used to emulate floating-point instructions with
  6885.       an opcode of DBh
  6886. Note:    the floating-point emulators in Borland and Microsoft languages and
  6887.       Lahey FORTRAN use this interrupt
  6888. SeeAlso: INT 36,INT 38
  6889. --------r-38---------------------------------
  6890. INT 38 - FLOATING POINT EMULATION - OPCODE DCh
  6891. Desc:    this interrupt is used to emulate floating-point instructions with
  6892.       an opcode of DCh
  6893. Note:    the floating-point emulators in Borland and Microsoft languages and
  6894.       Lahey FORTRAN use this interrupt
  6895. SeeAlso: INT 37,INT 39
  6896. --------O-3802-------------------------------
  6897. INT 38 - PC-MOS/386 v3.0 - GET MOS INTERNAL DATA POINTER
  6898.     AH = 02h
  6899. Return: AX = 0000h
  6900.     ES:BX -> ??? internal data structure
  6901. Program: PC-MOS/386 is a multitasking/multiuser MS-DOS-compatible operating
  6902.       system by Software Links, Inc.
  6903. SeeAlso: AH=04h,AH=10h,INT 21/AX=3000h,INT D4
  6904. --------O-3804-------------------------------
  6905. INT 38 - PC-MOS/386 v3.0 - GET TASK CONTROL BLOCK
  6906.     AH = 04h
  6907. Return: ES = segment of Task Control Block (TCB) (see below)
  6908. SeeAlso: AH=02h,INT D4
  6909.  
  6910. Format of Task Control Block:
  6911. Offset    Size    Description
  6912.  00h  2 BYTEs    signature "HT"
  6913.  02h 23 BYTEs    ???
  6914.  19h    BYTE    task time slice
  6915.  1Ah  7 BYTEs    ???
  6916.  21h 11 BYTEs    name of currently executing task
  6917.  2Ch 79 BYTEs    ???
  6918.  7Bh  4 BYTEs    user name
  6919.  7Fh    BYTE    current output class
  6920.  80h  7 BYTEs    protection access rights, 2 bits per class (writeable!)
  6921.     ???
  6922. --------O-380703-----------------------------
  6923. INT 38 - PC-MOS/386 v3.0 - WAIT FOR KEYPRESS OR TIMEOUT
  6924.     AX = 0703h
  6925.     CX = timeout (in seconds???)
  6926. Return: AH bit 0 set if key pressed, clear otherwise
  6927. SeeAlso: INT 16/AH=00h,INT D4
  6928. --------O-3810-------------------------------
  6929. INT 38 - PC-MOS/386 v3.0 - ENTER NATIVE 386 EXECUTION MODE
  6930.     AH = 10h
  6931.     CX = NCA (???) length in bytes (at least 1024???)
  6932.     DX = NCA segment
  6933. Return: in protected mode
  6934.     all segment registers converted to appropriate selectors
  6935. Note:    MS-DOS calls are available in protected mode
  6936. SeeAlso: AH=11h,AH=12h,INT 2F/AX=1687h,INT 67/AX=DE0Ch,INT D4
  6937. --------O-3811-------------------------------
  6938. INT 38 - PC-MOS/386 v3.0 - ALLOCATE NATIVE MODE MEMORY BLOCK
  6939.     AH = 11h
  6940.     EBX = block length
  6941. Return: ES = selector for allocated block
  6942. SeeAlso: AH=10h,AH=12h,INT D4
  6943. --------O-3812-------------------------------
  6944. INT 38 - PC-MOS/386 v3.0 - FREE NATIVE MODE MEMORY BLOCK
  6945.     AH = 12h
  6946.     ES = selector for block to free
  6947. SeeAlso: AH=10h,AH=11h,INT D4
  6948. --------r-39---------------------------------
  6949. INT 39 - FLOATING POINT EMULATION - OPCODE DDh
  6950. Desc:    this interrupt is used to emulate floating-point instructions with
  6951.       an opcode of DDh
  6952. Note:    the floating-point emulators in Borland and Microsoft languages and
  6953.       Lahey FORTRAN use this interrupt
  6954. SeeAlso: INT 38,INT 3A
  6955. --------r-3A---------------------------------
  6956. INT 3A - FLOATING POINT EMULATION - OPCODE DEh
  6957. Desc:    this interrupt is used to emulate floating-point instructions with
  6958.       an opcode of DEh
  6959. Note:    the floating-point emulators in Borland and Microsoft languages and
  6960.       Lahey FORTRAN use this interrupt
  6961. SeeAlso: INT 39,INT 3B
  6962. --------r-3B---------------------------------
  6963. INT 3B - FLOATING POINT EMULATION - OPCODE DFh
  6964. Desc:    this interrupt is used to emulate floating-point instructions with
  6965.       an opcode of DFh
  6966. Note:    the floating-point emulators in Borland and Microsoft languages and
  6967.       Lahey FORTRAN use this interrupt
  6968. SeeAlso: INT 3A,INT 3C
  6969. --------r-3C---------------------------------
  6970. INT 3C - FLOATING POINT EMULATION - INSTRUCTIONS WITH SEGMENT OVERRIDE
  6971. Notes:    the floating-point emulators in Borland and Microsoft languages and
  6972.       Lahey FORTRAN use this interrupt
  6973.     the generated code is  CD 3C xy mm ....
  6974.       where xy is a modified ESC instruction and mm is the modR/M byte.
  6975.       The xy byte appears to be encoded as
  6976.         s s 0 1 1 x x x      or    s s 0 0 0 x x x
  6977.       where "ss" specifies the segment override:
  6978.         00 -> DS:
  6979.         01 -> SS:
  6980.         10 -> CS:
  6981.         11 -> ES:
  6982. SeeAlso: INT 3B,INT 3D
  6983. --------r-3D---------------------------------
  6984. INT 3D - FLOATING POINT EMULATION - STANDALONE FWAIT
  6985. Notes:    the floating-point emulators in Borland and Microsoft languages and
  6986.       Lahey FORTRAN use this interrupt
  6987.     this vector is modified but not restored by Direct Access v4.0, and
  6988.       may be left dangling by other programs written with the same version
  6989.       of compiled BASIC
  6990. SeeAlso: INT 3C,INT 3E
  6991. --------r-3E---------------------------------
  6992. INT 3E - FLOATING POINT EMULATION - Borland LANGUAGES "SHORTCUT" CALL
  6993. Notes:    the two bytes following the INT 3E instruction are the subcode and
  6994.       a NOP (90h), except for subcodes DCh and DEh, where the second byte
  6995.       is a register count (01h-08h)
  6996.     this vector is modified but not restored by Direct Access v4.0, and
  6997.       may be left dangling by other programs written with the same version
  6998.       of compiled BASIC
  6999. SeeAlso: INT 3D
  7000.  
  7001. Subcode        Function
  7002.  DCh    load 8086 stack with 8087 registers; overwrites the 10*N bytes at the
  7003.       top of the stack prior to the INT 3E with the 8087 register contents
  7004.  DEh    load 8087 registers from top of 8086 stack; ST0 is furthest from top
  7005.       of 8086 stack
  7006.  E0h    round TOS and R1 to single precision, compare, pop twice
  7007.       returns AX=8087 status word, FLAGS=8087 condition bits
  7008.  E2h    round TOS and R1 to double precision, compare, pop twice
  7009.       returns AX=8087 status word, FLAGS=8087 condition bits
  7010.     Note: buggy in TPas5.5, because it sets the 8087 precision control
  7011.       field to the undocumented value 01h; this results in actually
  7012.       rounding to single precision
  7013.  E4h    compare TOS/R1 with two POP's
  7014.       returns FLAGS=8087 condition bits
  7015.  E6h    compare TOS/R1 with POP
  7016.       returns FLAGS=8087 condition bits
  7017.  E8h    FTST (check TOS value)
  7018.       returns FLAGS=8087 condition bits
  7019.  EAh    FXAM (check TOS value)
  7020.       returns AX=8087 status word
  7021.  ECh    sine(ST0)
  7022.  EEh    cosine(ST0)
  7023.  F0h    tangent(ST0)
  7024.  F2h    arctangent(ST0)
  7025.  F4h    ST0 = ln(ST0)
  7026.  F6h    ST0 = log2(ST0)
  7027.  F8h    ST0 = log10(ST0)
  7028.  FAh    ST0 = e**ST0
  7029.  FCh    ST0 = 2**ST0
  7030.  FEh    ST0 = 10**ST0
  7031. --------r-3F---------------------------------
  7032. INT 3F - Overlay manager interrupt (Microsoft LINK.EXE, Borland TLINK VROOMM)
  7033. Notes:    INT 3F is the default, and may be overridden while linking
  7034.     this vector is modified but not restored by Direct Access v4.0, and
  7035.       may be left dangling by other programs written with the same version
  7036.       of compiled BASIC
  7037. SeeAlso: INT FE"OVERLAY"
  7038. --------r-3F---------------------------------
  7039. INT 3F - Microsoft Dynamic Link Library manager
  7040. SeeAlso: INT 21/AH=4Bh
  7041. --------B-40---------------------------------
  7042. INT 40 - DISKETTE - ROM BIOS DISKETTE HANDLER RELOCATED BY HARD DISK BIOS
  7043. SeeAlso: INT 13,INT 63
  7044. --------h-40---------------------------------
  7045. INT 40 - Z100 - Master 8259 - Parity error or S100 error
  7046. SeeAlso: INT 41"Z100",INT FF"Z100"
  7047. --------O-40---------------------------------
  7048. INT 40 - Acorn BBC Master 512 - "OSFIND" - OPEN FILE
  7049.     AL = operation
  7050.         00h close file
  7051.         40h open file for reading
  7052.         80h open file for writing
  7053.         C0h open file for random access
  7054.     DS:BX -> CR-terminated filename
  7055. Return: AL = file handle (00h if file closed or could not be opened)
  7056. Note:    the Acorn BBC Master 512 is an 80186-based add-on board for the
  7057.       6502-based Master 128 which uses the original CPU as an I/O processor
  7058. SeeAlso: INT 41"Acorn",INT 42"Acorn",INT 43"Acorn",INT 44"Acorn",INT 4C"Acorn"
  7059. --------B-41---------------------------------
  7060. INT 41 - SYSTEM DATA - HARD DISK 0 PARAMETER TABLE
  7061. Note:    the default parameter table array is located at F000h:E401h in 100%
  7062.       compatible BIOSes; the pointer may be overridden by the hard disk
  7063.       controller's BIOS to support drive formats unknown to the ROM BIOS
  7064. SeeAlso: INT 13/AH=09h,INT 1E,INT 46
  7065.  
  7066. Format of fixed disk parameters:
  7067. Offset    Size    Description
  7068.  00h    WORD    number of cylinders
  7069.  02h    BYTE    number of heads
  7070.  03h    WORD    starting reduced write current cylinder (XT only, 0 for others)
  7071.  05h    WORD    starting write precompensation cylinder number
  7072.  07h    BYTE    maximum ECC burst length (XT only)
  7073.  08h    BYTE    control byte
  7074.            bits 0-2: drive option (XT only, 0 for others)
  7075.            bit 3:    set if more than 8 heads (AT and later only)
  7076.            bit 4:    always 0
  7077.            bit 5:    set if manufacturer's defect map on max cylinder+1
  7078.                  (AT and later only)
  7079.            bit 6:    disable ECC retries
  7080.            bit 7:    disable access retries
  7081.  09h    BYTE    standard timeout (XT only, 0 for others)
  7082.  0Ah    BYTE    formatting timeout (XT only, 0 for others)
  7083.  0Bh    BYTE    timeout for checking drive (XT only, 0 for others)
  7084.  0Ch    WORD    cylinder number of landing zone (AT and later only)
  7085.  0Eh    BYTE    number of sectors per track (AT and later only)
  7086.  0Fh    BYTE    reserved
  7087. --------h-41---------------------------------
  7088. INT 41 - Z100 - Master 8259 - Processor Swap
  7089. SeeAlso: INT 40"Z100",INT 42"Z100"
  7090. --------O-41---------------------------------
  7091. INT 41 - Acorn BBC Master 512 - "OSGBPB" - MULTI-BYTE GET/PUT
  7092.     AL = function
  7093.         01h put bytes sequentially
  7094.         02h put bytes, ignoring sequential pointer
  7095.         03h get bytes sequentially
  7096.         04h get bytes, ignoring sequential pointer
  7097.         05h get media title and boot option
  7098.         06h get current device and directory
  7099.         07h get current library and device
  7100.         08h search directory
  7101.     DS:BX -> control block (see below)
  7102. Return: CF clear if successful
  7103.     CF set on error
  7104.     AL = 00h if operation attempted
  7105.     AL unchanged if unsupported function
  7106. SeeAlso: INT 40"Acorn",INT 42"Acorn",INT 43"Acorn"
  7107.  
  7108. Format of control block:
  7109. Offset    Size    Description
  7110.  00h    BYTE    file handle
  7111.  01h    DWORD    pointer to data in either I/O processor or Tube processor
  7112.  05h    DWORD    number of bytes to be transferred
  7113.  09h    DWORD    transfer address
  7114. --------G-4112-------------------------------
  7115. INT 41 P - MS Windows debugging kernel - "OutputDebugString"
  7116.     AH = 12h
  7117.     ???
  7118. Return: ???
  7119. SeeAlso: AH=50h
  7120. --------G-4150-------------------------------
  7121. INT 41 P - MS Windows debugging kernel - "DefineDebugSegment"
  7122.     AH = 50h
  7123.     ???
  7124. Return: ???
  7125. SeeAlso: AH=12h
  7126. --------V-42---------------------------------
  7127. INT 42 - VIDEO - RELOCATED DEFAULT INT 10 VIDEO SERVICES (EGA,VGA)
  7128. SeeAlso: INT 10
  7129. Note:    not used by PS/2 built-in VGA or XGA
  7130. --------h-42---------------------------------
  7131. INT 42 - Z100 - Master 8259 - Timer
  7132. SeeAlso: INT 41"Z100",INT 43"Z100"
  7133. --------O-42---------------------------------
  7134. INT 42 - Acorn BBS Master 512 - "OSBPUT" - WRITE SINGLE BYTE TO FILE
  7135.     AL = byte to be written
  7136.     BH = file handle
  7137. Return: flags destroyed
  7138. SeeAlso: INT 40"Acorn",INT 41"Acorn",INT 43"Acorn",INT 47"Acorn",INT 49"Acorn"
  7139. --------V-43---------------------------------
  7140. INT 43 - VIDEO DATA - CHARACTER TABLE (EGA,MCGA,VGA)
  7141.    points at graphics data for characters 00h-7Fh of the current font
  7142. SeeAlso: INT 1F,INT 44"VIDEO"
  7143. --------h-43---------------------------------
  7144. INT 43 - Z100 - Master 8259 - Slave 8259 input
  7145. Note:    slave runs in special fully nested mode
  7146. SeeAlso: INT 42"Z100",INT 44"Z100"
  7147. --------O-43---------------------------------
  7148. INT 43 - Acorn BBC Master 512 - "OSBGET" - READ SINGLE BYTE FROM FILE
  7149.     BH = file handle
  7150. Return: CF clear if successful
  7151.         AL = byte read from file
  7152.     CF set on error
  7153. SeeAlso: INT 40"Acorn",INT 41"Acorn",INT 42"Acorn",INT 46"Acorn"
  7154. --------V-44---------------------------------
  7155. INT 44 - VIDEO DATA - ROM BIOS CHARACTER FONT, CHARACTERS 00h-7Fh (PCjr)
  7156.    points at graphics data for current character font
  7157. SeeAlso: INT 1F,INT 43"VIDEO"
  7158. --------N-44---------------------------------
  7159. INT 44 - Novell NetWare - HIGH-LEVEL LANGUAGE API
  7160. --------I-44---------------------------------
  7161. INT 44 - IBM 3270-PC High Level Language API
  7162.     DS:SI -> parameter control block
  7163. --------h-44---------------------------------
  7164. INT 44 - Z100 - Master 8259 - Serial A
  7165. SeeAlso: INT 43"Z100",INT 45"Z100"
  7166. --------v-44---------------------------------
  7167. INT 44 - VIRUS - "Lehigh" - ORIGINAL INT 21h VECTOR
  7168. SeeAlso: INT 32"VIRUS",INT 60"VIRUS",INT 70"VIRUS",INT 9E"VIRUS"
  7169. --------O-4400-------------------------------
  7170. INT 44 - Acorn BBC Master 512 - "OSARGS" - GET/SET FILE PARAMS FOR OPEN FILE
  7171.     AH = 00h
  7172.         AL = function
  7173.         00h get current filing system
  7174.             Return: AL = filing system (see below)
  7175.         01h get address of commandline tail
  7176.             Return: BX buffer filled with address of command tail
  7177.                     in I/O processor address space
  7178.                     (use INT 4A/AL=05h to retrieve)
  7179.         FFh flush all files onto secondary storage
  7180.     AH = file handle
  7181.         AL = function
  7182.         00h get sequential pointer for file
  7183.         01h set sequential pointer for file
  7184.         02h get length of file
  7185.     BX -> 4-byte data buffer
  7186. Return: BX buffer updated if appropriate
  7187. Note:    the commandline tail is terminated with a carriage return (0Dh)
  7188. SeeAlso: INT 40"Acorn",INT 41"Acorn",INT 45"Acorn",INT 4A"Acorn"
  7189.  
  7190. Values for filing system:
  7191.  00h none
  7192.  01h 1200 bps cassette
  7193.  02h 300 bps cassette
  7194.  03h ROM FS
  7195.  04h DFS
  7196.  05h ANFS/NFS
  7197.  06h TFS
  7198.  08h ADFS
  7199. --------h-45---------------------------------
  7200. INT 45 - Z100 - Master 8259 - Serial B
  7201. SeeAlso: INT 44"Z100",INT 46"Z100"
  7202. --------O-45---------------------------------
  7203. INT 45 - Acorn BBC Master 512 - "OSFILE" - READ/WRITE FILE OR DIRECTORY INFO
  7204.     AL = function
  7205.         00h save block of memory as file
  7206.         01h update directory entry for existing file
  7207.         02h set load address for existing file
  7208.         03h set execution address for existing file
  7209.         04h set attributes for existing file
  7210.         05h read directory
  7211.         06h delete file
  7212.         FFh load file
  7213.     DS:BX -> control block (see below)
  7214. Return: FLAGS destroyed
  7215.     AL = file type
  7216.         00h not found
  7217.         01h file found
  7218.         02h directory found
  7219.         FFh    protected file
  7220. SeeAlso: INT 40"Acorn",INT 41"Acorn",INT 44"Acorn",INT 46"Acorn"
  7221.  
  7222. Format of control block:
  7223. Offset    Size    Description
  7224.  00h    WORD    address of CR-terminated filename
  7225.  02h    DWORD    load address of file
  7226.  06h    DWORD    execution address of file
  7227.  0Ah    DWORD    start address of data to save
  7228.  0Eh    DWORD    end address of data to save, or file attributes
  7229.         file attributes in low byte:
  7230.             bit 0: no owner read access
  7231.             bit 1: no owner write access
  7232.             bit 2: not executable by owner
  7233.             bit 3: not deletable by owner
  7234.             bit 4: no public read access
  7235.             bit 5: no public write access
  7236.             bit 6: not executable with public access
  7237.             bit 7: not deletable with public access
  7238.         other three bytes are filing-system specific file attributes
  7239. --------B-46---------------------------------
  7240. INT 46 - SYSTEM DATA - HARD DISK 1 DRIVE PARAMETER TABLE
  7241. SeeAlso: INT 13/AH=09h,INT 41
  7242. --------h-46---------------------------------
  7243. INT 46 - Z100 - Master 8259 - Keyboard, Retrace, and Light Pen
  7244. SeeAlso: INT 45"Z100",INT 47"Z100"
  7245. --------O-46---------------------------------
  7246. INT 46 - Acorn BBC Master 512 - "OSRDCH" - GET CHARACTER FROM CUR INPUT STREAM
  7247. Return: CF clear if successful
  7248.         AL = character read
  7249.     CF set on error
  7250.         AL = error code
  7251. SeeAlso: INT 40"Acorn",INT 43"Acorn",INT 47"Acorn",INT 49"Acorn"
  7252. --------h-47---------------------------------
  7253. INT 47 - Z100 - Master 8259 - Printer
  7254. SeeAlso: INT 46"Z100",INT 48"Z100"
  7255. --------O-47---------------------------------
  7256. INT 47 - Acorn BBC Master 512 - "OSWRCH" - WRITE CHARACTER TO CUR OUTPUT STREAM
  7257.     AL = character to be written
  7258. Return: FLAGS destroyed
  7259. SeeAlso: INT 40"Acorn",INT 46"Acorn",INT 49"Acorn"
  7260. ----------478000-----------------------------
  7261. INT 47 - SQL Base - DATABASE ENGINE API
  7262.     AX = 8000h
  7263.     DS:BX -> parameter block, first word is function number
  7264. Program: SQL Base is a network-oriented database engine by Gupta Technologies
  7265. SeeAlso: AX=8001h
  7266.  
  7267. Values for function number:
  7268.  01h    "SQLFINI" initalialize application's use of the database
  7269.  02h    "SQLFDON" application is done using the database
  7270.  03h    "SQLFCON" connect to a cursor/database
  7271.  04h    "SQLFDIS" disconnect from a cursor/database
  7272.  05h    "SQLFCOM" compile a SQL command
  7273.  06h    "SQLFEXE" execute a SQL command
  7274.  07h    "SQLFCEX" compile and execute a SQL command
  7275.  08h    "SQLFCMT" commit a transaction to the database
  7276.  09h    "SQLFDES" describe the items of a SELECT statement
  7277.  0Ah    "SQLFGFI" get fetch information
  7278.  0Bh    "SQLFFBK" fetch previous result row from SELECT statement
  7279.  0Ch    "SQLFFET" fetch next result row from SELECT statement
  7280.  0Dh    "SQLFEFB" enable fetch backwards
  7281.  0Eh    "SQLFPRS" position in result set
  7282.  0Fh    "SQLFURS" undo result set
  7283.  10h    "SQLFNBV" get number of bind variables
  7284.  11h    "SQLFBND" bind data variables
  7285.  12h    "SQLFBNN" bind numerics
  7286.  13h    "SQLFBLN" bind long number
  7287.  14h    "SQLFBLD" bind long data variables
  7288.  15h    "SQLFSRS" start restriction set processing
  7289.  16h    "SQLFRRS" restart restriction set processing
  7290.  17h    "SQLFCRS" close restriction set
  7291.  18h    "SQLFDRS" drop restriction set
  7292.  19h    "SQLFARF" apply Roll Forward journal
  7293.  1Ah    "SQLFERF" end Roll Forward journal
  7294.  1Bh    "SQLFSRF" start Roll Forward journal
  7295.  1Ch    "SQLFSTO" store a compiled SQL command
  7296.  1Dh    "SQLFRET" retrieve a compiled SQL command
  7297.  1Eh    "SQLFDST" drop a stored command
  7298.  1Fh    "SQLFCTY" get command type
  7299.  20h    "SQLFEPO" get error position
  7300.  21h    "SQLFGNR" get number of rows
  7301.  22h    "SQLFNSI" get number of select items
  7302.  23h    "SQLFRBF" get Roll Back flag
  7303.  24h    "SQLFRCD" get return code
  7304.  25h    "SQLFROW" get number of ROWs
  7305.  26h    "SQLFSCN" set cursor name
  7306.  27h    "SQLFSIL" set isolation level
  7307.  28h    "SQLFSLP" set log parameters
  7308.  29h    "SQLFSSB" set select buffer
  7309.  2Ah    "SQLFSSS" set sort space
  7310.  2Bh    "SQLFRLO" read long
  7311.  2Ch    "SQLFWLO" write long
  7312.  2Dh    "SQLFLSK" long seek
  7313.  2Eh    "SQLFGLS" get long size
  7314.  2Fh    "SQLFELO" end long operation
  7315.  30h    "SQLFRBK" roll back a transaction from the database
  7316.  31h    "SQLFERR" error message
  7317.  32h    "SQLFCPY" copy
  7318.  33h    "SQLFR01" reserved
  7319.  34h    "SQLFSYS" system
  7320.  35h    "SQLFSTA" statistics
  7321.  36h    "SQLFR02" reserved
  7322.  37h    "SQLFXAD" extra add
  7323.  38h    "SQLFXCN" extra character to number
  7324.  39h    "SQLFXDA" extra date add
  7325.  3Ah    "SQLFXDP" extra date picture
  7326.  3Bh    "SQLFXDV" extra divide
  7327.  3Ch    "SQLFXML" extra multiply
  7328.  3Dh    "SQLFXNP" extra number picture
  7329.  3Eh    "SQLFXPD" extra picture date
  7330.  3Fh    "SQLFXSB" extra subtract
  7331.  40h    "SQLFINS" install database
  7332.  41h    "SQLFDIN" deinstall database
  7333.  42h    "SQLFDIR" directory of databases
  7334.  43h    "SQLFTIO" timeout
  7335.  44h    "SQLFFQN" get fully qualified column name
  7336.  45h    "SQLFEXP" explain execution plan
  7337.  46h    "SQLFFER" get full error
  7338.  47h    "SQLFBKP" begin online backup
  7339.  48h    "SQLFRDC" read backup data chunk
  7340.  49h    "SQLFEBK" end backup
  7341.  4Ah    "SQLFRES" begin restore from backup
  7342.  4Bh    "SQLFWDC" write backup data chunk for restore
  7343.  4Ch    "SQLFRRD" recover restored database to consistent state
  7344.  4Dh    "SQLFERS" end restore
  7345.  4Eh    "SQLFNRR" return number of result set rows
  7346.  4Fh    "SQLFSTR" start restriction mode
  7347.  50h    "SQLFSPR" stop restriction mode
  7348.  51h    "SQLFCNC" connect 2
  7349.  52h    "SQLFCNR" connect with no recovery
  7350.  53h    "SQLFOMS" set output message size
  7351.  54h    "SQLFIMS" set input message size
  7352.  55h    "SQLFSCP" set cache pages
  7353.  56h    "SQLFDSC" describe items of a SELECT statement (external)
  7354.  57h    "SQLFLAB" get label info for items in SELECT statement
  7355.  58h    "SQLFCBV" clear bind variables
  7356.  59h    "SQLFGET" get database information
  7357.  5Ah    "SQLFSET" set database information
  7358.  5Bh    "SQLFTEC" translate error code
  7359. ----------478001-----------------------------
  7360. INT 47 - SQL Base - GET VERSION NUMBER
  7361.     AX = 8001h
  7362. Return: ???
  7363. Program: SQL Base is a network-oriented database engine by Gupta Technologies
  7364. SeeAlso: AX=8000h
  7365. --------B-48---------------------------------
  7366. INT 48 - KEYBOARD - CORDLESS KEYBOARD TRANSLATION (PCjr)
  7367. SeeAlso: INT 49"PCjr"
  7368. --------h-48---------------------------------
  7369. INT 48 - Z100 - Slave 8259 - S100 vectored line 0
  7370. SeeAlso: INT 47"Z100",INT 49"Z100"
  7371. --------N-48---------------------------------
  7372. INT 48 - Watstar PC Network data pointer 1
  7373. SeeAlso: INT 49"Watstar"
  7374. --------O-48---------------------------------
  7375. INT 48 - Acorn BBC Master 512 - "OSNEWL" - SEND NEWLINE TO OUTPUT STREAM
  7376. Return: FLAGS destroyed
  7377. Note:    writes a carriage return (0Dh) followed by a linefeed (0Ah)
  7378. SeeAlso: INT 40"Acorn",INT 47"Acorn",INT 49"Acorn"
  7379. --------B-49---------------------------------
  7380. INT 49 - SYSTEM DATA - NON-KEYBOARD SCAN-CODE TRANSLATION TABLE (PCjr)
  7381. SeeAlso: INT 48"PCjr"
  7382.  
  7383. Format of translation table:
  7384. Offset    Size    Description
  7385.  00h    BYTE    number of nonkeyboard scancodes in the table
  7386.  01h  N WORDs    high byte 00h (NUL) byte scancode with low order byte
  7387.         representing the scancode mapped values relative to their
  7388.         input values within the range of 56h through 7Eh
  7389. --------h-49---------------------------------
  7390. INT 49 - Z100 - Slave 8259 - S100 vectored line 1
  7391. SeeAlso: INT 48"Z100",INT 4A"Z100"
  7392. ----------49---------------------------------
  7393. INT 49 - Texas Instruments PC - VIDEO I/O???
  7394.     apparently provides direct video display on the TI Professional PC
  7395. --------N-49---------------------------------
  7396. INT 49 - Watstar PC Network data pointer 2
  7397. SeeAlso: INT 49"Watstar"
  7398. --------O-49---------------------------------
  7399. INT 49 - Acorn BBC Master 512 - "OSASCI" - WRITE CHARACTER TO CUR OUTPUT STREAM
  7400.     AL = character to be written
  7401. Return: FLAGS destroyed
  7402. Note:    converts carriage return (0Dh) into CRLF sequence (0Dh 0Ah)
  7403. SeeAlso: INT 40"Acorn",INT 46"Acorn",INT 47"Acorn",INT 48"Acorn"
  7404. --------a-490001-----------------------------
  7405. INT 49 - MAGic v1.16+ - TURN ON MAGNIFICATION
  7406.     AX = 0001h
  7407. Return: AX = status
  7408.         0000h cannot magnify current video mode
  7409.         0002h magnified (text mode)
  7410.         0003h magnified (graphics mode)
  7411.         FFFDh function works only in magnified mode
  7412.         FFFFh MAGic busy, retry later
  7413.     BX,CX,DX destroyed
  7414. Program: MAGic (MAGnification In Color) is a TSR by Microsystems Software, Inc.
  7415.       providing 2x2 text and graphics magnification on VGA, XGA, and SVGA
  7416. Note:    INT 49 is the default, but may be overridden on the commandline.  The
  7417.       actual interrupt in use may be found by searching for the signature
  7418.       "MAGic" or "xMAGic" (for the deluxe version) immediately preceding
  7419.       the interrupt handler (this is also the installation check).    MAGic
  7420.       uses CodeRunneR, which places the signature "RT" at offset 0000h in
  7421.       the interrupt handler's segment, followed by MAGic's TSR ID of
  7422.       "VMAG".
  7423. SeeAlso: AX=0001h,AX=0003h,AX=0004h,AX=0008h
  7424. Index:    installation check;MAGic
  7425. --------a-490002-----------------------------
  7426. INT 49 - MAGic v1.16+ - TURN OFF MAGNIFICATION
  7427.     AX = 0002h
  7428. Return: AX = status (see AX=0001h)
  7429.     BX,CX,DX destroyed
  7430. SeeAlso: AX=0001h
  7431. --------a-490003-----------------------------
  7432. INT 49 - MAGic v1.16+ - SHIFT MAGNIFIED WINDOW TO INCLUDE SPECIFIED LOCATION
  7433.     AX = 0003h
  7434.     BX = vertical position (character row [text] or pixel row [graphics])
  7435.     DX = horizontal position (char column [text] or 8-pixel units [gr])
  7436. Return: AX = status
  7437.         0000h successful
  7438.         FFFFh MAGic busy, retry later
  7439.     BX,CX,DX destroyed
  7440. Note:    window is not moved if the position is inside the current window
  7441. SeeAlso: AX=0001h,AX=0004h,AX=0005h
  7442. --------a-490004-----------------------------
  7443. INT 49 - MAGic v1.16+ - REPOSITION MAGNIFIED WINDOW
  7444.     AX = 0004h
  7445.     BX = vertical position of upper left corner
  7446.     DX = horizontal position
  7447. Return: AX = status (see AX=0003h)
  7448.     BX,CX,DX destroyed
  7449. SeeAlso: AX=0001h,AX=0003h,AX=0005h
  7450. --------a-490005-----------------------------
  7451. INT 49 - MAGic v1.16+ - GET POSITION OF MAGNIFIED WINDOW
  7452.     AX = 0005h
  7453. Return: AX = status
  7454.         0000h successful
  7455.         BX = vertical position (char row or pixel row)
  7456.         DX = horizontal position (char column or 8-pixel units)
  7457.         FFFFh MAGic busy, retry later
  7458.         BX,DX destroyed
  7459.     CX destroyed
  7460. SeeAlso: AX=0001h,AX=0003h,AX=0004h,AX=0006h,AX=0007h
  7461. --------a-490006-----------------------------
  7462. INT 49 - MAGic v1.16+ - GET SIZE OF FULL SCREEN
  7463.     AX = 0006h
  7464. Return: AX = status
  7465.         0000h successful
  7466.         BX = vertical size (char rows or pixel rows)
  7467.         DX = horizontal size (char cols or 8-pixel units)
  7468.         FFFFh MAGic busy, retry later
  7469.         BX,DX destroyed
  7470.     CX destroyed
  7471. SeeAlso: AX=0001h,AX=0005h,AX=0007h
  7472. --------a-490007-----------------------------
  7473. INT 49 - MAGic v1.16+ - GET SIZE OF MAGNIFICATION WINDOW
  7474.     AX = 0007h
  7475. Return: AX = status
  7476.         0000h successful
  7477.         BX = vertical size (char rows or pixel rows)
  7478.         DX = horizontal size (char cols or 8-pixel units)
  7479.         FFFEh invalid function
  7480.         FFFFh MAGic busy, retry later
  7481.         BX,DX destroyed
  7482.     CX destroyed
  7483. BUG:    in v1.16 and v1.17, this function is not recognized as valid, but
  7484.       AX=0000h is accepted and will branch into hyperspace
  7485. SeeAlso: AX=0001h,AX=0006h
  7486. --------a-490008-----------------------------
  7487. INT 49 - MAGic v1.23+ - SET TEXT MODE MAGNIFICATION SIZE
  7488.     AX = 0008h
  7489.     BX = scaling factor (01h=1.4 times, 02h, 04h, 06h, 08h, 09h=12 times)
  7490. Return: AX = status
  7491.         0000h successful
  7492.         FFFBh scaling factor only available in MAGic Deluxe
  7493.         FFFCh already in magnified state, can't set size
  7494. Notes:    this call specifies the amount a subsequent call to AX=0001h should
  7495.       magnify the display
  7496.     scaling factors greater than 2 are only available in MAGic Deluxe
  7497. SeeAlso: AX=0001h
  7498. --------B-4A---------------------------------
  7499. INT 4A C - SYSTEM - USER ALARM HANDLER
  7500. Desc:    This interrupt is invoked by the BIOS when a real-time clock alarm
  7501.       occurs; an application may use it to perform an action at a
  7502.       predetermined time.
  7503. Note:    this interrupt is called from within a hardware interrupt handler,
  7504.       so all usual precautions against reentering DOS must be taken
  7505. SeeAlso: INT 1A/AH=06h
  7506. --------h-4A---------------------------------
  7507. INT 4A - Z100 - Slave 8259 - S100 vectored line 2
  7508. SeeAlso: INT 49"Z100",INT 4B"Z100"
  7509. --------O-4A---------------------------------
  7510. INT 4A - Acorn BBC Master 512 - "OSWORD" - MISC FUNCTIONS USING CONTROL BLOCK
  7511.     AL = function code
  7512.         FAh transfer data between 80186 and 65C12 I/O processor
  7513.     DS:BX -> control block (see below)
  7514. Return: FLAGS destroyed
  7515.     control block updated
  7516. Note:    there are more functions than are listed here, but details are not
  7517.       available
  7518. SeeAlso: INT 40"Acorn",INT 4B"Acorn",INT 4C"Acorn"
  7519.  
  7520. Format of control block for function FAh:
  7521. Offset    Size    Description
  7522.  00h    BYTE    number of parameters sent to I/O processor (0Dh,0Eh)
  7523.  01h    BYTE    number of parameters read from I/O processor (01h)
  7524.  02h    DWORD    I/O processor address
  7525.  06h    DWORD    80186 segment:offset address
  7526.  0Ah    WORD    number of bytes to transfer
  7527.  0Ch    BYTE    operation type
  7528.         00h write to 65C12 at 24 us/byte
  7529.         01h read from 65C12 at 24 us/byte
  7530.         02h write to 65C12 at 26 us/word
  7531.         03h read from 65C12 at 26 us/word
  7532.         04h write to 65C12 at 10 us/byte using 256-byte blocks
  7533.         05h read from 65C12 at 10 us/byte using 256-byte blocks
  7534.  0Dh    BYTE    65C12 memory access control (only used if offset 00h = 0Eh)
  7535.         bit 7: unused
  7536.         bit 6: always use main screen memory if I/O addr 3000h-7FFFh
  7537.             (overrides bit 5)
  7538.         bit 5: use shadow screen memory if screen address specified
  7539.         bit 4: use current ROM rather than ROM selected by bits 3-0
  7540.             (only if I/O address between 8000h and BFFFh)
  7541.         bits 3-0: paged ROM number
  7542. --------h-4B---------------------------------
  7543. INT 4B - Z100 - Slave 8259 - S100 vectored line 3
  7544. SeeAlso: INT 4A"Z100",INT 4C"Z100"
  7545. --------d-4B---------------------------------
  7546. INT 4B - Common Access Method SCSI interface (draft revision 1.9)
  7547.     ES:DI -> CAM Control Block (see INT 4F/AX=8100h)
  7548. Notes:    the CAM committee moved the interface to INT 4F after revision 1.9
  7549.       to avoid conflicting with the IBM SCSI interface and the Virtual
  7550.       DMA specification
  7551.     the installation check for the driver is the string "SCSI_CAM" eight
  7552.       bytes past the INT 4Bh handler
  7553.     it is not known whether any drivers actually implemented this
  7554.       interface on INT 4B instead of INT 4F
  7555. SeeAlso: INT 4F/AX=8100h
  7556. Index:    installation check;Common Access Method SCSI interface
  7557. --------O-4B---------------------------------
  7558. INT 4B - Acorn BBC Master 512 - "OSBYTE" - MISC FUNCTIONS USING REGISTER PARAMS
  7559.     AL = function code
  7560.     BL = first parameter
  7561.     BH = second parameter (if needed)
  7562. Return: BL = first return parameter
  7563.     BH = second return parameter
  7564.     CF depends on function
  7565. SeeAlso: INT 40"Acorn",INT 4A"Acorn",INT 4C"Acorn"
  7566. --------d-4B80-------------------------------
  7567. INT 4B - IBM SCSI interface
  7568.     AH = 80h
  7569.     details not yet available
  7570. --------d-4B8102DX0000-----------------------
  7571. INT 4B - Virtual DMA Specification (VDS) - GET VERSION
  7572.     AX = 8102h
  7573.     DX = 0000h
  7574. Return: CF clear if successful
  7575.         AH = major version number
  7576.         AL = minor version number
  7577.         BX = product number (see below)
  7578.         CX = product revision number
  7579.         always 0000h for QMAPS and HPMM.SYS
  7580.         always 0001h for Microsoft's EMM386.EXE v4.20-4.41
  7581.         SI:DI = maximum DMA buffer size
  7582.         DX = flags
  7583.         bit 0: PC/XT bus (DMA in first megabyte only)
  7584.         bit 1: physical buffer/remap region in first megabyte
  7585.         bit 2: automatic remap enabled
  7586.         bit 3: all memory is physically contiguous
  7587.         bits 4-15 reserved (zero)
  7588.     CF set on error
  7589.         AL = error code (see below)
  7590. Note:    bit 5 of 0040h:007Bh is supposed to be set if VDS is supported; this is
  7591.       apparently not always the case
  7592. SeeAlso: INT 31
  7593. Index:    installation check;Virtual DMA Spec
  7594.  
  7595. Values for product number:
  7596.  0000h for Quadtel's QMAPS and Hewlett-Packard's HPMM.SYS
  7597.  0001h for Microsoft's EMM386.EXE
  7598.  4560h ("E`") for Qualitas' 386MAX
  7599.  4D43h ("MC") for V Communication's Memory Commander
  7600.  5145h ("QE") for Quarterdeck's QEMM-386
  7601.  
  7602. Values for error code:
  7603.  01h    region not in contiguous memory
  7604.  02h    region crossed a physical alignment boundary
  7605.  03h    unable to lock pages
  7606.  04h    no buffer available
  7607.  05h    region too large for buffer
  7608.  06h    buffer currently in use
  7609.  07h    invalid memory region
  7610.  08h    region was not locked
  7611.  09h    number of physical pages greater than table length
  7612.  0Ah    invalid buffer ID
  7613.  0Bh    copy out of buffer range
  7614.  0Ch    invalid DMA channel number
  7615.  0Dh    disable count overflow
  7616.  0Eh    disable count underflow
  7617.  0Fh    function not supported
  7618.  10h    reserved flag bits set in DX
  7619.  
  7620. Format of DMA descriptor structure (DDS):
  7621. Offset    Size    Description
  7622.  00h    DWORD    region size
  7623.  04h    DWORD    offset
  7624.  08h    WORD    segment/selector
  7625.  0Ah    WORD    buffer ID
  7626.  0Ch    DWORD    physical address
  7627.  
  7628. Format of Extended DMA descriptor structure (EDDS):
  7629. Offset    Size    Description
  7630.  00h    DWORD    region size
  7631.  04h    DWORD    offset
  7632.  08h    WORD    segment/selector
  7633.  0Ah    WORD    reserved
  7634.  0Ch    WORD    number available
  7635.  0Eh    WORD    number used
  7636.  10h    DWORD    region 0 physical address
  7637.  14h    DWORD    region 0 size in bytes
  7638.  18h    DWORD    region 1 physical address
  7639.  1Ch    DWORD    region 1 size in bytes
  7640.     ...
  7641.  
  7642. Format of Extended DMA descriptor structure (EDDS) with page table entries:
  7643. Offset    Size    Description
  7644.  00h    DWORD    region size
  7645.  04h    DWORD    offset
  7646.  08h    WORD    segment/selector
  7647.  0Ah    WORD    reserved
  7648.  0Ch    WORD    number available
  7649.  0Eh    WORD    number used
  7650.  10h    DWORD    page table entry 0 (same as 80386 page table entry)
  7651.  14h    DWORD    page table entry 1
  7652.     ...
  7653. Note:    bits 1-11 of the page table entries should be zero; bit 0 set if page
  7654.       is present and locked
  7655. --------d-4B8103-----------------------------
  7656. INT 4B - Virtual DMA Specification - LOCK DMA REGION
  7657.     AX = 8103h
  7658.     DX = flags
  7659.         bit 0: reserved (zero)
  7660.         bit 1: data should be copied into buffer (ignored if bit 2 set)
  7661.         bit 2: buffer should not be allocated if region noncontiguous or
  7662.            crosses physical alignment boundary specified by bits 4-5
  7663.         bit 3: don't attempt automatic remap
  7664.         bit 4: region must not cross 64K physical alignment boundary
  7665.         bit 5: region must not cross 128K physical alignment boundary
  7666.          6-15: reserved (zero)
  7667.     ES:DI -> DMA descriptor structure (see AX=8102h)
  7668. Return:    CF clear if successful
  7669.         DDS physical address field filled in
  7670.         DDS buffer ID field filled (0000h if no buffer allocated)
  7671.     CF set on error
  7672.         AL = error code (see AX=8102h)
  7673.         DDS region size field filled wth maximum contiguous length in bytes
  7674. BUGS:    Windows 3.0 does not correctly support automatic remapping or copying
  7675.       in enhanced mode
  7676.     Windows 3.0 in enhanced mode does not return a correct code on error
  7677. SeeAlso: AX=8104h,AX=8105h
  7678. --------d-4B8104-----------------------------
  7679. INT 4B - Virtual DMA Specification - UNLOCK DMA REGION
  7680.     AX = 8104h
  7681.     DX = flags
  7682.         bit 0: reserved (zero)
  7683.         bit 1: data should be copied out of buffer
  7684.         bits 2-15 reserved (zero)
  7685.     ES:DI -> DMA descriptor structure (see AX=8102h) with region size,
  7686.         physical address, and buffer ID fields set
  7687. Return: CF clear if successful
  7688.         DDS physical address field set
  7689.         DDS buffer ID field set (0000h if no buffer allocated)
  7690.     CF set on error
  7691.         AL = error code (see AX=8102h)
  7692.         DDS region size field filled wth maximum contiguous length in bytes
  7693. Note:    Windows 3.0 does not check whether the region extends beyond the end of
  7694.       a segment
  7695. BUG:    Windows 3.0 in enhanced mode does not return a correct code on error
  7696. SeeAlso: AX=8103h,AX=8106h
  7697. --------d-4B8105-----------------------------
  7698. INT 4B - Virtual DMA Specification - SCATTER/GATHER LOCK REGION
  7699.     AX = 8105h
  7700.     DX = flags
  7701.         bits 0-5 reserved (zero)
  7702.         bit 6: EDDS should be returned with page table entries
  7703.         bit 7: only present pages should be locked (not-present pages
  7704.             receive entry of 0000h)
  7705.         bits 8-15 reserved (zero)
  7706.     ES:DI -> Extended DMA descriptor structure (see AX=8102h)
  7707.         region size, linear segment, linear offset, and number avail
  7708.         fields set
  7709. Return: CF clear if successful
  7710.         EDDS number used field set
  7711.         if DX bit 6 set, lower 12 bits of BX = offset in first page
  7712.     CF set on error
  7713.         AL = error code (see AX=8102h)
  7714.         EDDS region size field filled with max length in bytes that can be
  7715.         locked and described in the EDDS table
  7716. BUG:    Windows 3.0 in enhanced mode may return zero instead of the physical
  7717.       page address for pages which were originally not present
  7718. SeeAlso: AX=8103h,AX=8106h
  7719. --------d-4B8106-----------------------------
  7720. INT 4B - Virtual DMA Specification - SCATTER/GATHER UNLOCK REGION
  7721.     AX = 8106h
  7722.     DX = flags
  7723.         bits 0-5 reserved (zero)
  7724.         bit 6: EDDS contains page table entries
  7725.         bit 7: EDDS may contain not-present pages (entry = 0000h)
  7726.         bits 8-15 reserved (zero)
  7727.     ES:DI -> Extended DMA descriptor structure (see AX=8102h) returned
  7728.         by AX=8105h    
  7729. Return: CF clear if successful
  7730.     CF set on error
  7731.         AL = error code (see AX=8102h)
  7732. Note:    according to the Microsoft version of the VDS specification, the
  7733.       actual scatter/gather list is ignored, while according to the IBM
  7734.       version of the specification, "the result of a LOCK operation"
  7735.       must be provided to this function
  7736. SeeAlso: AX=8104h,AX=8105h
  7737. --------d-4B8107-----------------------------
  7738. INT 4B - Virtual DMA Specification - REQUEST DMA BUFFER
  7739.     AX = 8107h
  7740.     DX = flags
  7741.         bit 0: reserved (zero)
  7742.         bit 1: data should be copied into buffer
  7743.         bits  2-15 reserved (zero)
  7744.     ES:DI -> DMA descriptor structure (see AX=8102h) with region size set
  7745.         (also region offset and region segment if DX bit 1 set)
  7746. Return: CF clear if successful
  7747.         DDS physical address and buffer ID set
  7748.         DDS region size filled with length of buffer
  7749.     CF set on error
  7750.         AL = error code (see AX=8102h)
  7751. SeeAlso: AX=8108h
  7752. --------d-4B8108-----------------------------
  7753. INT 4B - Virtual DMA Specification - RELEASE DMA BUFFFER
  7754.     AX = 8108h
  7755.     DX = flags
  7756.         bit 0: reserved (zero)
  7757.         bit 1: data should be copied out of buffer
  7758.         bits 2-15 reserved (zero)
  7759.     ES:DI -> DMA descriptor structure (see AX=8102h) with buffer ID set
  7760.         (also region size/region offset/segment if DX bit 1 set)
  7761. Return: CF clear if successful
  7762.     CF set on error
  7763.         AL = error code (see AX=8102h)
  7764. BUG:    under Windows 3.0 Enhanced mode, you must specify that data be copied
  7765.       for this function to work correctly
  7766. SeeAlso: AX=8107h
  7767. --------d-4B8109DX0000-----------------------
  7768. INT 4B - Virtual DMA Specification - COPY INTO DMA BUFFER
  7769.     AX = 8109h
  7770.     DX = 0000h
  7771.     ES:DI -> DMA descriptor structure (see AX=8102h) with buffer ID,
  7772.         region segment/offset, and region size fields set
  7773.     BX:CX = starting offset into DMA buffer
  7774. Return: CF clear if successful
  7775.     CF set on error
  7776.         AL = error code (see AX=8102h)
  7777. BUG:    Windows 3.0 Enhanced mode does not correctly interpret the copy count
  7778. SeeAlso: AX=810Ah
  7779. --------d-4B810ADX0000-----------------------
  7780. INT 4B - Virtual DMA Specification - COPY OUT OF DMA BUFFER
  7781.     AX = 810Ah
  7782.     DX = 0000h
  7783.     ES:DI -> DMA descriptor structure (see AX=8102h) with buffer ID,
  7784.         region segment/offset, and region size fields set
  7785.     BX:CX = starting offset into DMA buffer
  7786. Return: CF clear if successful
  7787.     CF set on error
  7788.         AL = error code (see AX=8102h)
  7789. BUG:    Windows 3.0 Enhanced mode does not correctly interpret the copy count
  7790. SeeAlso: AX=8109h
  7791. --------d-4B810B-----------------------------
  7792. INT 4B - Virtual DMA Specification - DISABLE DMA TRANSLATION
  7793.     AX = 810Bh
  7794.     BX = DMA channel number
  7795.     DX = 0000h
  7796. Return: CF clear if successful
  7797.     CF set on error
  7798.         AL = error code (see AX=8102h)
  7799. SeeAlso: AX=810Ch
  7800. --------d-4B810C-----------------------------
  7801. INT 4B - Virtual DMA Specification - ENABLE DMA TRANSLATION
  7802.     AX = 810Ch
  7803.     BX = DMA channel number
  7804.     DX = 0000h
  7805. Return: CF clear if successful
  7806.         ZF set if disable count decremented to zero
  7807.     CF set on error
  7808.         AL = error code (see AX=8102h)
  7809. SeeAlso: AX=810Bh
  7810. --------Q-4B810D-----------------------------
  7811. INT 4B - QEMM-386 - BUG
  7812.     AX = 810Dh
  7813. Note:    the code in QEMM v5.11 and 6.00 jumps to an invalid location on this
  7814.       call
  7815. --------h-4C---------------------------------
  7816. INT 4C - Z100 - Slave 8259 - S100 vectored line 4
  7817. SeeAlso: INT 4B"Z100",INT 4D"Z100"
  7818. --------O-4C---------------------------------
  7819. INT 4C - Acorn BBC Master 512 - "OSCLI" - INTERPRET COMMAND LINE
  7820.     DS:BX -> CR-terminated command string
  7821. Return: FLAGS destroyed
  7822. SeeAlso: INT 40"Acorn",INT 4A"Acorn",INT 4B"Acorn"
  7823. --------h-4D---------------------------------
  7824. INT 4D - Z100 - Slave 8259 - S100 vectored line 5
  7825. SeeAlso: INT 4C"Z100",INT 4E"Z100"
  7826. --------d-4E---------------------------------
  7827. INT 4E - TI Professional PC - DISK I/O
  7828.     used instead of INT 13 on the TI Professional PC
  7829. SeeAlso: INT 13
  7830. --------h-4E---------------------------------
  7831. INT 4E - Z100 - Slave 8259 - S100 vectored line 6
  7832. SeeAlso: INT 4D"Z100",INT 4F"Z100"
  7833. --------h-4F---------------------------------
  7834. INT 4F - Z100 - Slave 8259 - S100 vectored line 7
  7835. SeeAlso: INT 4E"Z100"
  7836. --------d-4F8100-----------------------------
  7837. INT 4F - Common Access Method SCSI interface rev 2.3 - SEND CCB TO XPT/SIM
  7838.     AX = 8100h
  7839.     ES:BX -> CAM Control Block (CCB) (see below)
  7840. Return: AH = status
  7841.         00h successful
  7842.         01h invalid CCB address (0000h:0000h)
  7843. Note:    the SCSI Interface Module (SIM) may complete the requested function
  7844.       and invoke the completion callback function before this call returns
  7845. SeeAlso: AX=8200h,INT 2F/AX=7F01h,INT 4B"Common Access Method"
  7846.  
  7847. Values for CAM function code:
  7848.  00h NOP
  7849.  01h execute SCSI I/O
  7850.  02h get device type
  7851.  03h path inquiry
  7852.  04h release SIM queue
  7853.  05h set async callback
  7854.  06h set device type
  7855.  07h-0Fh reserved
  7856.  10h abort SCSI command
  7857.  11h reset SCSI bus
  7858.  12h reset SCSI device
  7859.  13h terminate I/O process
  7860.  14h-1Fh reserved
  7861.  20h engine inquiry
  7862.  21h execute engine request
  7863.  22h-2Fh reserved
  7864.  30h enable logical unit number
  7865.  31h execute target I/O
  7866.  32h-7Fh reserved
  7867.  80h-FFh vendor-specific functions
  7868.  
  7869. Format of CAM Control Block:
  7870. Offset    Size    Description
  7871.  00h    DWORD    physical address of this CCB
  7872.  04h    WORD    CAM control block length
  7873.  06h    BYTE    function code (see above)
  7874.  07h    BYTE    CAM status (see below)
  7875.  08h    BYTE    SCSI status
  7876.  09h    BYTE    path ID (FFh = XPT)
  7877.  0Ah    BYTE    target ID
  7878.  0Bh    BYTE    logical unit number
  7879.  0Ch    WORD    CAM flags (see below)
  7880.  0Eh    BYTE    CAM address flags (see below)
  7881.  0Fh    BYTE    target-mode flags (see below)
  7882. ---function 02h---
  7883.  10h    DWORD    pointer to 36-byte buffer for inquiry data or 0000h:0000h
  7884.  14h    BYTE    peripheral device type of target logical unit number
  7885. ---function 03h---
  7886.  10h    BYTE    version number (00h-07h prior to rev 1.7, 08h = rev 1.7,
  7887.         09h-FFh = rev no, i.e. 23h = rev 2.3)
  7888.  11h    BYTE    SCSI capabilities (see below)
  7889.  12h    BYTE    target mode support
  7890.         bit 7: processor mode
  7891.         bit 6: phase-cognizant mode
  7892.         bit 5-0: reserved
  7893.  13h    BYTE    miscellaneous flags
  7894.         bit 7: scanned high to low instead of low to high
  7895.         bit 6: removables not included in scan
  7896.         bit 5: inquiry data not kept by XPT
  7897.         bits 4-0: reserved
  7898.  14h    WORD    engine count
  7899.  16h 14 BYTEs    vendor-specific data
  7900.  24h    DWORD    size of private data area
  7901.  28h    DWORD    asynchronous event capabilities (see below)
  7902.  2Ch    BYTE    highest path ID assigned
  7903.  2Dh    BYTE    SCSI device ID of initiator
  7904.  2Eh  2 BYTEs    reserved
  7905.  30h 16 BYTEs    SIM vendor ID
  7906.  40h 16 BYTEs    HBA (host bus adaptor) vendor ID
  7907.  50h  4 BYTEs    operating-system dependant usage
  7908. ---functions 00h,04h,11h,12h---
  7909.  no additional fields
  7910. ---function 05h---
  7911.  10h    DWORD    asynchronous event enables (see function 03h above)
  7912.  14h    DWORD    pointer to asynchronous callback routine
  7913.  18h    DWORD    pointer to peripheral driver buffer
  7914.  1Ch    BYTE    size of peripheral buffer
  7915. ---function 06h---
  7916.  10h    BYTE    peripheral device type of target
  7917. ---functions 10h,13h---
  7918.  10h    DWORD    pointer to CCB to be aborted
  7919. ---function 20h---
  7920.  10h    WORD    engine number
  7921.  12h    BYTE    engine type
  7922.         00h buffer memory
  7923.         01h lossless compression
  7924.         02h lossy compression
  7925.         03h encryption
  7926.  13h    BYTE    engine algorithm ID
  7927.         00h vendor-unique
  7928.         01h LZ1 variation 1 (STAC)
  7929.         02h LZ2 variation 1 (HP DCZL)
  7930.         03h LZ2 variation 2 (Infochip)
  7931.  14h    DWORD    engine memory size
  7932. ---function 21h---
  7933.  10h    DWORD    pointer to peripheral driver
  7934.  14h  4 BYTEs    reserved
  7935.  18h    DWORD    OS-dependent request-mapping info
  7936.  1Ch    DWORD    address of completion callback routine
  7937.  20h    DWORD    pointer to scatter/gather list or data buffer
  7938.  24h    DWORD    length of data transfer
  7939.  28h    DWORD    pointer to engine buffer data
  7940.  2Ch  2 BYTEs    reserved
  7941.  2Eh    WORD    number of scatter/gather entries
  7942.  30h    DWORD    maximum destination data length
  7943.  34h    DWORD    length of destination data
  7944.  38h    DWORD    source residual length
  7945.  3Ch 12 BYTEs    reserved
  7946.  48h    DWORD    OS-dependent timeout value
  7947.  4Ch  4 BYTEs    reserved
  7948.  50h    WORD    engine number
  7949.  52h    WORD    vendor-unique flags
  7950.  54h  4 BYTEs    reserved
  7951.  58h  N BYTEs    private data area for SIM
  7952. ---function 30h---
  7953.  10h    WORD    group 6 vendor-unique CDB length
  7954.  12h    WORD    group 7 vendor-unique CDB length
  7955.  14h    DWORD    pointer to target CCB list
  7956.  18h    WORD    number of target CCBs
  7957. ---other functions---
  7958.  10h    DWORD    pointer to peripheral driver
  7959.  14h    DWORD    pointer to next CCB
  7960.  18h    DWORD    OS-dependent request mapping information
  7961.  1Ch    DWORD    address of completion callback routine
  7962.  20h    DWORD    pointer to scatter/gather list or data buffer
  7963.  24h    DWORD    length of data transfer
  7964.  28h    DWORD    pointer to sense info buffer
  7965.  2Ch    BYTE    length of sense info buffer
  7966.  2Dh    BYTE    CDB length
  7967.  2Eh    WORD    number of scatter/gather entries
  7968.  30h  4 BYTEs    reserved
  7969.  34h    BYTE    SCSI status
  7970.  35h  3 BYTEs    reserved
  7971.  38h    DWORD    residual length
  7972.  40h 12 BYTEs    Command Descriptor Block (CDB)
  7973.  44h    DWORD    OS-dependent timeout value
  7974.  48h    DWORD    pointer to message buffer
  7975.  4Ch    WORD    length of message buffer
  7976.  4Eh    WORD    vendor-unique flags
  7977.  50h    BYTE    tag queue action
  7978.  51h  3 BYTEs    reserved
  7979.  54h  N BYTEs    private data area for SIM
  7980.  
  7981. Bitfields for CAM flags:
  7982.  bit 0    CDB is a pointer
  7983.  bit 1    tagged queue action enable
  7984.  bit 2    linked CDB
  7985.  bit 3    disable callback on completion
  7986.  bit 4    scatter/gather
  7987.  bit 5    disable autosense
  7988.  bits 7-6 direction (00 reserved, 01 in, 10 out, 11 no data transfer)
  7989.  bits 9-8 reserved
  7990.  bit 10    engine synchronize
  7991.  bit 11    SIM queue freeze
  7992.  bit 12    SIM queue priority
  7993.      1 head insertion
  7994.     0 tail insertion (normal)
  7995.  bit 13    disable synchronous transfers   / exclusive
  7996.  bit 14    initiate synchronous transfers  \ mutually
  7997.  bit 15    disable disconnect
  7998.  
  7999. Bitfields for CAM address flags:
  8000.  bit 7    SG list/data (0 = host, 1 = engine)
  8001.  bit 6    CDB pointer    (bits 6-1: 0=virtual addr, 1=phys addr)
  8002.  bit 5    SG list/data
  8003.  bit 4    sense buffer
  8004.  bit 3    message buffer
  8005.  bit 2    next CCB
  8006.  bit 1    callback on completion
  8007.  bit 0    reserved
  8008.  
  8009. Values for CAM status:
  8010.  00h request in progress
  8011.  01h request successful
  8012.  02h host aborted request
  8013.  03h unable to abort request
  8014.  04h request completed with error
  8015.  05h CAM is busy
  8016.  06h invalid request
  8017.  07h invalid path ID
  8018.  08h no such SCSI device
  8019.  09h unable to terminate I/O process
  8020.  0Ah timeout on target selection
  8021.  0Bh timeout on command
  8022.  0Dh receive message rejection
  8023.  0Eh sent/received SCSI bus reset
  8024.  0Fh detected uncorrectable parity error
  8025.  10h Autosense request failed
  8026.  11h no HBA detected
  8027.  12h data over/underrun
  8028.  13h bus freed unexpectedly
  8029.  14h target bus phase sequence failure
  8030.  15h CCB too small
  8031.  16h requested capability not available
  8032.  17h sent bus device reset
  8033.  18h terminate I/O process
  8034.  38h invalid LUN
  8035.  39h invalid target ID
  8036.  3Ah unimplemented function
  8037.  3Bh nexus not established
  8038.  3Ch invalid initiator ID
  8039.  3Dh received SCSI Command Descriptor Block
  8040.  3Eh LUN already enabled
  8041.  3Fh SCSI bus busy
  8042. Note:    bit 6 set to indicate frozen SIM queue
  8043.     bit 7 set to indicate valid autosense
  8044.  
  8045. Bitfields for target-mode flags:
  8046.  bit 7    data buffer valid
  8047.  bit 6    status valid
  8048.  bit 5    message buffer valid
  8049.  bit 4    reserved
  8050.  bit 3    phase-cognizant mode
  8051.  bit 2    target CCB available
  8052.  bit 1    disable autodisconnect
  8053.  bit 0    disable autosave/restore
  8054.  
  8055. Bitfields for SCSI capabilities:
  8056.  bit 7    modify data pointers
  8057.  bit 6    wide bus (32 bits)
  8058.  bit 5    wide bus (16 bits)
  8059.  bit 4    synchronous transfers
  8060.  bit 3    linked commands
  8061.  bit 2    reserved
  8062.  bit 1    tagged queueing
  8063.  bit 0    soft reset
  8064.  
  8065. Bitfields for asynchronous event capabilities:
  8066.  bits 31-24    vendor-specific
  8067.  bits 23-8    reserved
  8068.  bit 7    new devices found during rescan
  8069.  bit 6    SIM module deregistered
  8070.  bit 5    SIM module registered
  8071.  bit 4    sent bus device reset to target
  8072.  bit 3    SCSI AEN
  8073.  bit 2    reserved
  8074.  bit 1    unsolicited reselection
  8075.  bit 0    unsolicited SCSI bus reset
  8076.  
  8077. Completion callback function called with:
  8078.     interrupts disabled
  8079.     ES:BX -> completed CCB
  8080.  
  8081. Asynchronous callback function called with:
  8082.     AH = opcode
  8083.     AL = path ID generating callback
  8084.     DH = target ID causing event
  8085.     DL = LUN causing event
  8086.     CX = data byte count (if applicable)
  8087.     ES:BX -> data buffer (if applicable)
  8088. Return: all registers preserved
  8089. --------d-4F8200CX8765-----------------------
  8090. INT 4F - Common Access Method SCSI interface rev 2.3 - INSTALLATION CHECK
  8091.     AX = 8200h
  8092.     CX = 8765h
  8093.     DX = CBA9h
  8094. Return: AH = 00h if installed
  8095.         CX = 9ABCh
  8096.         DX = 5678h
  8097.         ES:DI -> "SCSI_CAM"
  8098. SeeAlso: AX=8100h,INT 4B"Common Access Method"
  8099. ---------------------------------------------
  8100.